CMP指令:比较指令,相当于减法指令,只是不保存结果。
cmp指令执行后,将对标志寄存器产生影响但是对原两个操作数不影响。用于进行比较两个操作数的大小
格式:
CMP 目的操作数,源操作数
目的操作数减源操作数,但不影响两个操作数的值
它影响flag的CF,ZF,OF,AF,PF
如果比较的是两个无符号数,则零标志位(ZF)和进位标志位(CF)表示的两个操作数关系如下:
CMP结果 | ZF | CF |
---|---|---|
目的操作数 < 源操作数 | 0 | 1 |
目的操作数 > 源操作数 | 0 | 0 |
目的操作数 = 源操作数 | 1 | 0 |
如果比较的是两个有符号数,则符号标志位(SF)、零标志位(ZF)和溢出标志位(OF)表示的两个操作数之间的关系如下:
CMP结果 | 标志位 |
---|---|
目的操作数 < 源操作数 | SF ≠ OF |
目的操作数 > 源操作数 | SF=OF |
目的操作数 = 源操作数 | ZF=1 |
若执行指令后ZF=1,说明两个数相等,前面一篇说过,ZF是零标志,如果运算结果等于0,ZF就等于1,两个数相等。
当无符号时,如果CF=1,说明了有进位或借位,CMP这个指令是减法操作,所以一定是借位了,这个时候目的操作数<源操作数;CF=0就说明没有借位,这个时候ZF如果为0,说明结果不为0,此时目的操作数>源操作数
当有符号时:
若SF=0,OF=0 说明了此时的值为正数,没有溢出,目的操作数>源操作数
若SF=1,OF=0 说明了此时的值为负数,没有溢出,目的操作数<源操作数
若SF=0,OF=1 说明了此时的值为正数,有溢出,目的操作数<源操作数
若SF=1,OF=1 说明了此时的值为负数,有溢出,目的操作数>源操作数
条件转移指令:
以标志位的状态或者以标志位的逻辑运算结果作为转移依据,如果满足转移条件,则转到目标地址所指示的指令执行否则继续执行下一条指令。
一般格式:
JXX 目的地址(destination)
条件转移的种类:
一、条件转移(31)
无符号条件转移指令:
例:
MOV AH,0x1
MOV AL,0x0
CMP AH,AL ;AH和AL比较
JA L1 ;AH大于AL 则跳转到L1
有符号条件转移指令:
单标志位状态条件转移:
/JA/JAE/JB/JBE/JG/JGE/JL/JLE/JE/JNE/JC/JNC/JO/JNO/JS/JNS/JP/JNP/JNBE/JNB/JNAE/JNA/JNLE/JNL/JNGE/JNG/JZ/JNZ/JPE/JPO
二、无条件转移指令(1)
在需要无条件移动到特定位置时使用,以确保程序的顺利执行
一般格式:
JMP 目的地址(destination)
1 条评论
[…] 汇编(16)条件转移指令/CMP/各种条件结构/If.Then.Case.And.Or […]