cmp是比较命令,cmp的功能相当于减法命令,只是不保存结果。 执行cmp指令会影响标志寄存器。 其他相关指令通过标识这些受影响的标志寄存器的位而知道比较结果。
例如:
mov ax,8
mov bx,3
cmp ax,bx
执行后: ax=8,ZF=0,PF=1,SF=0,CF=0,OF=0。
执行cmp指令时,可以从相关标志位的值中看出比较的结果。
cmp ax,bx的逻辑意义是比较ax,bx的值。 执行后:
ZF=1的话AX=BX
ZF=0的话是AX!=BX
如果SF=1,则为AX
如果SF=0,则AX=BX
如果SF=0和ZF=0,则为AXBX
如果SF=1或ZF=1,则AX=BX
当执行cmp指令时,CPU还包括两种含义:进行无符号运算和有符号运算。
cmp ah,bh
如果ah=bh则ah-bh=0,所以ZF=1
如果ahbh的话ah-bh0,所以ZF=0
因此,根据执行cmp指令后ZF的值,可以知道两个数据是否相等。 如果ah
关于带符号数运算,为ah
ah=1,bh=2为ah-bh=0FFH,0FFH为-1的补数,由于结果为负,SF=1。
ah=0FEH,bx=OFFH; ax-bx=-2-(-1 )=OFFH,由于结果为负,所以SF=1。
扩展数据:
汇编语言的常用指令集如下。
数据传输指令集
MOV
功能:将源操作数发送到目标操作数
语法: MOV的操作数、源操作数
格式: MOV r1,r2
MOV r,m
MOV m,r
MOV r,data
XCHG
功能:交换两个操作数的数据
语法: XCHG
格式: XCHG r1,r2 XCHG m,r XCHG r,m
PUSH,POP
将功能:操作数推入或取出堆栈
语法:推送操作数POP操作数
格式: pushrpushmpushdatapoprpopm
PUSHF,POPF,PUSHA,POPA
功能:堆栈指令组
格式: PUSHF POPF PUSHA POPA
LEA,LDS,LES
把功能:地址拿到寄存器
语法: LEA r,m LDS r,m LES r,m
xlat(xlatb )
功能:查找表指令
语法: XLAT XLAT m
算术运算指令
ADD,ADC
功能:加法指令
语法: ADD OP1,OP2 ADC OP1,OP2
格式: ADD r1,r2 ADD r,m ADD m,r ADD r,data
影响标记: C、p、a、z、s、o
SUB,SBB
功能:减法指令
语法: SUB OP1,OP2 SBB OP1,OP2
格式: SUB r1、r2 SUB r、m SUB m、r SUB r、data SUB m、data
影响标记: C、p、a、z、s、o
INC,DEC
功能:将OP的值加1或减1
语法: INC OP DEC OP
格式: INC r/m DEC r/m
影响标记: P,a,z,s,o
NEG
功能:反转OP的符号(取二进制补码) )。
语法: NEG OP
格式: NEG r/m
影响标记: C、p、a、z、s、o
MUL,IMUL
功能:乘法指令
语法: MUL OP IMUL OP
格式: MUL r/m IMUL r/m
影响标志: C、p、a、z、s、o ()只有IMUL影响s标志) )。
DIV,IDIV
功能:除法指令
语法: DIV OP IDIV OP
格式: DIV r/m IDIV r/m
CBW,CWD
功能:有代码数扩展命令
语法: CBW CWD
AAA,AAS,AAM,AAD
功能:未压缩BCD码运算调整命令
语法: AAA AAS AAM AAD
影响标记: A、c(AAA,AAS ) s、z、p (AAM,AAD ) ) ) ) )。
来源:百度百科-CMP命令