汇编语言中的加减法
发布网友
发布时间:2022-07-17 16:56
我来回答
共1个回答
热心网友
时间:2023-10-06 05:41
(加减指令,既作为无符号数影响标志位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
而且,
结果也是,
两个正数相加,
结果为负数了,
显然溢出
还有两种情况,
也是类似的.
一个是都没有产生进位,
那应该是两个小的正数相加,
结果还是正数,
没有溢出;
另外就是次高位没有产生进位,
但最高位产生进位了,
这应该是两个负数相加,
由于次高为位没有产生进位,
所以,
最高位,
也就是符号位结果为
0,
是正数,
显然也是溢出了.