关于sbb eax, eax以及sbb eax, 0FFFFFFFFh指令连用
首先来看看sbb指令到底是用来干嘛的:
sbb是带借位减法指令,它利用了CF位上记录的借位值。
指令格式:sbb 操作对象1, 操作对象2
功能:操作对象1=操作对象1 - 操作对象2 - CF
比如指令sbb ax,bx实现的功能是: (ax)=(ax)-(bx)-CF
sbb指令执行后,将对CF进行设置。
其与sub指令唯一差距是多了再减去CF的值这步。也就是说只有寄存器最高位产生了借位或者进位时(这将导致CF置1)才会导致其与sub指令不同。
来看一段例子, 这里执行的是cmp dl, bl。也就是说相当于dl - bl的值。如果说dl < bl的情况下就会发生借位。如果dl > bl的情况会发生跳转,但是CF不会置1。
总体来说,至少要dl和bl不同才会发生下面那句jnz short loc_401255的跳转,先来看dl > bl的情况
现在假设CF置1了。 发生跳转, 即马上将要执行sbb eax, eax。该指令将导致eax为0xFFFFFFFF(-1)。因为sbb eax, eax等于sub eax, eax接上sub eax, CF。由于又导致了借位发生所以CF标志位又置1了。
sbb eax, eax
接下去将执行sbb eax, 0FFFFFFFFh.此时eax为0xFFFFFFFF, 且CF为1,eax又变为了0xFFFFFFFF(-1)。
刚刚假设的前提是基于dl > bl的。
现在来看dl < bl的情况。首先跳转还是会发生,但是CF为0,sbb eax, eax等相当于sub eax, eax。接下去的sbb eax, 0FFFFFFFFh就相当于0 - (-1)就等于1了。
一般这个指令出现在strcmp内居多。
关于sbb eax, eax以及sbb eax, 0FFFFFFFFh指令连用相关推荐
- test dword ptr [eax],eax ; probe page.
局部数组变量定义超过所分配的最大空间 ----------------------------------- Posts Tagged 变量 局部数组变量定义所分配的最大空间为多少?如何设置大小 有两 ...
- 执行GetWindowTextA和其他api时,注意eax的长度,OD调试到内核层搞基,速度把我的文章放到首页
004015E7 |. 6A 20 push 20 ; /Count = 20 (32.) 004015E9 |. 68 42324000 push 00403242 ; |bbbb第二个框 0040 ...
- eax ax ah al
; 初始化 32 位代码段描述符 xor eax, eax mov ax, cs shl eax, 4 add eax, LABEL_SEG_CODE32 mov word [LABEL_DESC_ ...
- How does “mov (%ebx,%eax,4),%eax” work?
转自: http://stackoverflow.com/questions/14900343/how-does-mov-ebx-eax-4-eax-work The complete memo ...
- Intel寄存器名称解释及用途,%eax%ebx等都是什么意思
x86家族的CPU都有8个通用寄存器,每一个寄存器的名字都是一组单词的缩写.就连这四个分别叫做%eax,%ebx,%ecx,%edx的寄存器,尽管看似是随意按照abcd的字母排序的,其实这a,b,c, ...
- 汇编 movl %gs:20, %eax 的作用
将如下代码进行编译,输出的汇编版本为 int main() {int a[2][3]= {{1,2,3},{4,5,6}};return 0; } pushl %ebpmovl %esp, %ebpp ...
- 关于test eax eax
test eax eax 一般 if (a) { a = 0; } else { a++; } 会生成 TEST EAX, EAX JZ lb1 ;如果EAX为0则跳转到lb1 XO ...
- 007-寄存器EAX与AX,AH,AL关系
寄存器EAX 寄存器AX 寄存器AH 寄存器AL 一.EAX与AX,AH,AL关系图 一格表示一字节 AX AH AL EAX 二.代码测试 1.OD命令栏?号指令 (用计显示表达式的值) print ...
- 分支优化:neg+sbb算术运算代替逻辑跳
今天在分析一个样本的时候,发现一段代码. 1 // .text:100012DF sub esi, 0B7h // 183 2 // .text:100012E5 neg esi 3 // .text ...
最新文章
- 记录去大搜车的一道笔试题
- 31 天重构学习笔记5. 提升字段
- WWW 2021最佳论文亚军:基于属性补全的异质图神经网络新架构
- IntelliJ IDEA 如何知道项目中的模块数据_如何从项目源中选择模块加入当前项目中(添加模块)_如何移除项目中的模块(移除模块/删除模块)
- Tomcat 改BUG之 localhost:8080 404
- hdu2587(递推)
- (78)Verilog HDL条件编译:`ifdef
- mysql kegg_阿里技术官甩出的768页MySQL优化笔记,火遍全网不是意外
- Keras学习---MLP和CNN模型建立篇
- java2实用教程 第6版(课后习题总结)
- java dateutil 获取时间戳_java获取时间戳的方法
- php dev usb lp0,Android无法自动创建USB打印机节点/dev/usb/lp0
- Nebula Graph - SpringBoot 操作 Nebula
- H3C运维审计系统 Web配置指导(笔记)
- ORACLE EBS中消息队列fnd_msg_pub、fnd_message在PL/SQL中的应用
- windows画图板 ESL转RGB 实现区间渐变色
- 带参宏和带参函数的比较(C语言)
- const指针的一些总结
- python爬高德地图_利用Python爬取高德地图数据
- 传感器的使用,高仿微信摇一摇,动画加声音