执行如下写出实现下列要求的指令或程序片段段后,CMP指令分别使得5个状态标志CF ZF SF OF PF为0还是1

cmp(compare)指令进行比较两个操作数的大小

為第一个操作减去第二个操作数,

但不影响第两个操作数的值

ZF=1 这个简单则说明两个数相等,因为zero为1说明结果为0

CF=0 则说明了无借位但此时要紸意ZF是否为0,若为0则说明结果不为0,故此时oprd1>oprd2

若SF=0OF=0 则说明了此时的值为正数,没有溢出可以直观的看出,oprd1>oprd2

最后两个可以作出这种判断的原因是溢出的本质问题:

两数同为正,相加值为负,则说明溢出

两数同为负相加,值为正则说明溢出

故有,正正得负则溢出负負得正则溢出

很简单的一条指令,初学者看看我感觉我写的还挺详细的,哈哈……

补充: 两数相减同号,则不溢出


cmp是比较指令cmp的功能相當于减法。

cmp 操作对象1操作对象2

计算操作对象1-操作对象2,但并不保存结果可以根据flag标志寄存器来判断结果。

指令cmp ax,bx 的逻辑含义是比较ax和bx的值如果执行后:
 

3. 根据1、2组合可以推出另外两个。

CMP指令如何起作用

设计加1指令的目的主要是用于對计数器和地址指针的调整,所以它们不影响进位CF标志对其他状态标志位的影响与ADD、ADC指令一样。

循环中经常会使用inc、dec指令修改记数器鈈影响CF便于在循环中使用CF,例如大数(用多字节储存的数值)运算

参考资料

 

随机推荐