王爽《汇编语言》第三版 CMP指令 有符号数的比较

在讲解有符号数大小的判断方法时,有一句话是这样的:如果因为溢出导致了实际结果为负,那么逻辑上的真正结果必然为正如果因为溢出导致了实际结果为正,那么逻辑上的真正结果必然为负

对于这句话,想必有些读者肯定要理解好一会儿才能想明白这其中的原因

在学习《计算机组成原理》课程的时候,书中有一节降到了单位符号的数据进行加法运算时对溢出的判断,书中的意是这样的:如果两个具有相同符号位的的数相加,而得到的结果的符号位却和操作数的符号位相反,说明产生了溢出,大家可以随便找几个数试验一下

书中使用机器字长为4位的加法运算对此结论进行了举例说明:
这里写图片描述

在计算机中是不存在减法运算的,只有加法,减去一个数相当于加上这个数的补码,显然,相同符号的两个数字相加,结果必然也是和原符号相同的,如果产生了溢出,说明显示出的结果的符号和真正的结果的符号是正好相反的,因此我们就可以说:如果发生了溢出,而显示结果为负,则真正结果应该为正,显示结果为正,则真正结果应该为负

这样我们就总结出了有符号数比较大小的方法:

  • SF=1且OF=0 ax<bx
    • 无溢出,结果为负,说明左操作数小于右操作数
  • SF=1且OF=1 ax>bx
    • 产生溢出,结果为负,说明真正结果应该为正,左操作数大于右操作数
  • SF=0且OF=0且ZF=0 ax>bx
    • 无溢出,结果为非负,说明左操作数大于右操作数
  • SF=0且OF=1 ax<bx
    • 产生溢出,结果为正,说明真正结果应该为负,左操作数小于右操作数

一共就上面这四种情况,对于等于和不等于这两种关系,我们可以通过ZF标志位来判断

猜你喜欢

转载自blog.csdn.net/include_heqile/article/details/80639363