汇编语言笔记9
汇编语言笔记9
CMP比较指令和条件转移指令
cmp指令
cmp指令是比较指令。其相当于减法指令,只是不保存结果,只影响标志寄存器的值。其他指令可以通过识别这些标志寄存器的值来识别结果。
CMP AX,BX:比较ax和bx的大小:
无符号数:
| ax和bx的关系 | 运算结果 | 标志寄存器的值 |
|---|---|---|
| ax=bx | ax-bx=0,即zf=1 | zf=1 |
| ax != bx | ax-bx!=0,即zf=0 | zf=0 |
| ax>bx | ax-bx>0,且不产生借位 | zf=1,且cf=0 |
| ax>=bx | ax-bx>=0,且不必借位 | cf=0 |
| ax<bx | ax-bx<0,且产生借位 | cf=1 |
| ax<=bx | ax-bx<=0,且可能借位 | zf=1 或 zf=0且cf=1 |
对于有符号数,cmp指令会修改sf和of两个标志寄存器的值。其中sf表示运算结果的正负,of表示结果是否有溢出
- of=0,表示没有溢出,sf表示的正负即逻辑运算的正负。
- of=1,表示溢出,sf表示的正负和逻辑运算上的正负相反。
检测比较结果的条件转移指令
条件转移指令可以根据标志寄存器(zf,cf等)的值来决定是否进行转移。所有条件转移指令的转移位移都是 [-128,127]
条件转移指令通常和cmp指令进行配合:
| 指令名称 | 含义 | 检测的标志位 |
|---|---|---|
| je | 等于(equal)则转移 | zf=1则转移 |
| jne | 不等于(not equal)则转移 | zf=0则转移 |
| jb | 小于(below)则转移 | cf=1则转移 |
| jnb | 不小于(not below)则转移 | cf=0则转移 |
| ja | 大于(above)则转移 | zf=0且cf=0则转移 |
| jna | 不大于(not above)则转移 | zf=1或cf=0则转移 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 星辰微光的博客!





