cmp指令
-
cmp指令
- 格式:cmp操作对象1,操作对象2
- 功能:计算操作对象1-操作对象2
-
应用
- 其他相关指令通过识别这些被影响的标志寄存器位来得知比较结果。
指令 | cmp ax,ax | mov ax,8 mov bx,3 cmp ax,bx |
---|---|---|
功能 | 做(ax)-(ax)的运算,结果为0,但并不在ax中保存,仅影响flag的相关各位。 | (ax)=8, (bx)=3 |
标志寄存器 | ZF=1 PF=1 SF=0 CF=0 OF=0 | ZF=0 PF=1 SF=0 CF=0 OF=0 |
无符号数比较与标志位取值
-
思路:通过cmp指令执行后相关标志位的值,可以看出比较的结果
-
指令:cmp ah,bh
比较关系 (ax)?(bx) (ax) -(bx)特点 标志寄存器 等于 (ah)=(bh) (ah)- (bh)=0 ZF= 1 不等于 (ah)≠(bh) (ah)- (bh)≠0 ZF=0 小于 (ax)<(bx) (ax) -(bx)为负,且不溢出 SF=1且OF=0 大于 (ax) >(bx) (ax) -(bx)为负,且溢出 SF=1且OF=0 大于等于 (ax)≥(bx) (ax)-(bx)为非负,且无溢出 SF=0且OF=0 小于等于 (ax)<(bx) (ax) -(bx)为非负,且有溢出 SF=0或OF=1
条件转移指令的使用
-
jxxx系列指令和cmp指令配合,构造条件转移指令
- 不必再考虑cmp指令对相关标志位的影响和jxxx指令对相关标志位的检测
- 可以直接考虑cmp和jxxx指令配合使用时表现出来的逻辑含义。
-
jxxx系列指令和cmp指令配合实现高级语言中if语句的功能