汇编语言中的加减法

来源:百度知道 编辑:UC知道 时间:2024/05/13 11:22:22
在汇编语言中,如果是两个无符号数相加,若CF为1则OF为1,对吗?
如果是两个有符号数相加,是不是CF肯定不变或者为0?

(加减指令,既作为无符号数影响标志位CF,AF,又作为有符号数影响标志OF,SF。想了半天终于搞清楚了,CF标志反映最高位的进借位情况,而OF反映结果是否溢出,这里的结果是目的操作数中的结果,进借位它是不管的。你这样想的原因是,考虑到CF为1,则肯定溢出了,但是目的操作数中只能保存溢出后的值,丢掉了最高位,所以就不一定溢出了。看例子:
MOV AX,7896H;
ADD AL,AH;
;执行完后CF=1,AL=0EH,但是OEH不溢出,所以OF=0;

后面一句也不对吧。)
以上是我个人的理解。
以下是复制别人的理解:
CF 比较简单吧, 没有什么特别的.

OF 表示的带符号数进行运算是否溢出. 96+78, 一个是正数, 一个为负数, 相加肯定是不会有溢出的. OF 溢出只可能发生在两个相同符号的数值相加, 或者是不同符号数相减. 如果是从算法判断上来看, 如果是在运算时, 次高位向最高位和最高位向 CF 位产生进位情形一致的话, OF=0; 否则 OF=1.

96 10010110
+78 01111000
10E 100001110
这里, 次高位和最高位都产生了进位, 情形一致, 所以 OF=0

16 00010110
+78 01111000
08E 10001110
这里, 次高位向最高位产生了进位, 而最高位没有向 CF 产生进位, 所以 OF=1
而且, 结果也是, 两个正数相加, 结果为负数了, 显然溢出

还有两种情况, 也是类似的. 一个是都没有产生进位, 那应该是两个小的正数相加, 结果还是正数, 没有溢出; 另外就是次高位没有产生进位,