首先来看看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指令连用相关推荐

  1. test dword ptr [eax],eax ; probe page.

    局部数组变量定义超过所分配的最大空间 ----------------------------------- Posts Tagged 变量 局部数组变量定义所分配的最大空间为多少?如何设置大小 有两 ...

  2. 执行GetWindowTextA和其他api时,注意eax的长度,OD调试到内核层搞基,速度把我的文章放到首页

    004015E7 |. 6A 20 push 20 ; /Count = 20 (32.) 004015E9 |. 68 42324000 push 00403242 ; |bbbb第二个框 0040 ...

  3. eax ax ah al

    ; 初始化 32 位代码段描述符 xor eax, eax mov  ax, cs shl eax, 4 add eax, LABEL_SEG_CODE32 mov word [LABEL_DESC_ ...

  4. How does “mov (%ebx,%eax,4),%eax” work?

    转自:  http://stackoverflow.com/questions/14900343/how-does-mov-ebx-eax-4-eax-work The complete memo ...

  5. Intel寄存器名称解释及用途,%eax%ebx等都是什么意思

    x86家族的CPU都有8个通用寄存器,每一个寄存器的名字都是一组单词的缩写.就连这四个分别叫做%eax,%ebx,%ecx,%edx的寄存器,尽管看似是随意按照abcd的字母排序的,其实这a,b,c, ...

  6. 汇编 movl %gs:20, %eax 的作用

    将如下代码进行编译,输出的汇编版本为 int main() {int a[2][3]= {{1,2,3},{4,5,6}};return 0; } pushl %ebpmovl %esp, %ebpp ...

  7. 关于test eax eax

    test eax eax 一般 if (a) {    a = 0; } else {    a++; } 会生成 TEST EAX, EAX JZ lb1    ;如果EAX为0则跳转到lb1 XO ...

  8. 007-寄存器EAX与AX,AH,AL关系

    寄存器EAX 寄存器AX 寄存器AH 寄存器AL 一.EAX与AX,AH,AL关系图 一格表示一字节 AX AH AL EAX 二.代码测试 1.OD命令栏?号指令 (用计显示表达式的值) print ...

  9. 分支优化:neg+sbb算术运算代替逻辑跳

    今天在分析一个样本的时候,发现一段代码. 1 // .text:100012DF sub esi, 0B7h // 183 2 // .text:100012E5 neg esi 3 // .text ...

最新文章

  1. 记录去大搜车的一道笔试题
  2. 31 天重构学习笔记5. 提升字段
  3. WWW 2021最佳论文亚军:基于属性补全的异质图神经网络新架构
  4. IntelliJ IDEA 如何知道项目中的模块数据_如何从项目源中选择模块加入当前项目中(添加模块)_如何移除项目中的模块(移除模块/删除模块)
  5. Tomcat 改BUG之 localhost:8080 404
  6. hdu2587(递推)
  7. (78)Verilog HDL条件编译:`ifdef
  8. mysql kegg_阿里技术官甩出的768页MySQL优化笔记,火遍全网不是意外
  9. Keras学习---MLP和CNN模型建立篇
  10. java2实用教程 第6版(课后习题总结)
  11. java dateutil 获取时间戳_java获取时间戳的方法
  12. php dev usb lp0,Android无法自动创建USB打印机节点/dev/usb/lp0
  13. Nebula Graph - SpringBoot 操作 Nebula
  14. H3C运维审计系统 Web配置指导(笔记)
  15. ORACLE EBS中消息队列fnd_msg_pub、fnd_message在PL/SQL中的应用
  16. windows画图板 ESL转RGB 实现区间渐变色
  17. 带参宏和带参函数的比较(C语言)
  18. const指针的一些总结
  19. python爬高德地图_利用Python爬取高德地图数据
  20. 传感器的使用,高仿微信摇一摇,动画加声音

热门文章

  1. PCB的埋孔、盲孔、通孔
  2. OkGo上传文件、图片的用法
  3. 第56章 SQL UCASE() 函数教程
  4. element-ui的标签页之间跳转 - 默认选中
  5. ios手机 按钮点击事件没反应(按钮是js生成的)
  6. 电视剧《奋斗》精彩对白节选---(一)
  7. C语言结构体struct的语法解析
  8. CodeForces 954A Diagonal Walking
  9. split(),slice(),splice()的区别与应用
  10. 怎么设置计算机显示列表格式,(怎样显示excel的文件后缀名)excle后缀格式怎么显示...