cmp指令CMP是比较指令,CMP的功能相当于减法指令,只是不保存结果CMP指令执行后,将对标致寄存器产生影响其他相关指令通过识别这些被影响的标致寄存器位来得知比较结果,今天小编就来聊一聊关于汇编语言p命令怎么使用?接下来我们就一起去研究一下吧!
汇编语言p命令怎么使用
cmp指令
CMP是比较指令,CMP的功能相当于减法指令,只是不保存结果。CMP指令执行后,将对标致寄存器产生影响。其他相关指令通过识别这些被影响的标致寄存器位来得知比较结果。
CMP指令格式:CMP 操作对象1,操作对象2
功能:计算操作对象1 - 操作对象2 但不保存结果,仅仅根据计算结果对标志寄存器进行设置。
1.假设不考虑溢出情况,分析CMP AX,BX判断过程:
如果(ax) = (bx) 则 (ax)-(bx) = 0,所以:zf=1;
如果(ax) ≠ (bx) 则 (ax)-(bx) != 0,所以:zf=0;
如果(ax) < (bx) 则 (ax)-(bx) 将产生借位,所以:cf=1;
如果(ax) ≥ (bx) 则 (ax)-(bx) 不产生借位,所以:cf=0;
如果(ax) > (bx) 则 (ax)-(bx) != 0,也不产生借位,所以:zf=cf=0;
如果(ax) ≤ (bx) 则 (ax)-(bx) 可能为0,也可能产生借位,所以:zf=1 或 cf=1。
2.考虑溢出情况下,分析CMP AX,BX判断过程:
如果sf=1,而of=0,所以(AX)<(BX);
如果sf=1,而of=1(如果因为溢出导致实际结果为负,那么逻辑上真正的结果必然为正。),所以(AX) > (BX);
如果sf=0,而of=1(如果因为溢出导致实际结果为正,那么逻辑上真正的结果必然为负。),所以(AX) < (BX);
如果sf=0,而of=0,所以(AX) ≥ (BX)。
编程转移指令实际执行判断:
指令cmp ax,bx 的逻辑含义是比较ax和bx的值,如果执行后:
1. zf=1 ===> (ax)=(bx);
2. zf=0 ===> (ax)!=(bx);
3. 无符号数:cf=1 ===> (ax)<(bx),或者,有符号数:sf=1,of=0;sf=0,of=1 ===> (ax)<(bx);
4. 无符号数:cf=0 ===> (ax) ≥ (bx),或者,有符号数:sf=0,of=0 ===> (ax) ≥ (bx);
5. 无符号数:cf=zf=0 ===> (ax) > (bx),或者,有符号数:sf=1,of=1 ===> (ax) > (bx);
6. cf=1或zf=1 ===> (ax) ≤ (bx)
总结: zf是0标志寄存器,zf=1时,ax=bx;zf=0时,ax != bx。
无符号数检查zf,cf标志位;有符号数检查sf,of,zf标志位。
CMP指令如何使用?
-------------------------------
参考原文:http://blog.csdn.net/zhangjiuding/article/details/79145423