CMP指令:比较指令,相当于减法指令,只是不保存结果
cmp指令执行后,将对标志寄存器产生影响但是对原两个操作数不影响。用于进行比较两个操作数的大小

格式: 

 CMP   目的操作数,源操作数

目的操作数源操作数,但不影响两个操作数的值

它影响flag的CF,ZF,OF,AF,PF

如果比较的是两个无符号数,则零标志位(ZF)和进位标志位(CF)表示的两个操作数关系如下:

CMP结果ZFCF
目的操作数 < 源操作数01
目的操作数 > 源操作数00
目的操作数 = 源操作数10

如果比较的是两个有符号数,则符号标志位(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)







最后修改:2022 年 03 月 08 日
如果觉得我的文章对你有用,请随意赞赏