汇编语言笔记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则转移