汇编中溢出问题(OF)希望高人耐心解答

来源:百度知道 编辑:UC知道 时间:2024/09/23 04:20:10
AL=0EH,AH=78H
ADD AH, AL

结果 AH=86H,OF=1

溢出是因为86H>128(10)吗?

那AX=8600

ADD AX, 1234H

结果 AX=9834H ,OF=0又怎么解释? 9834H也是>32768为什么不溢出?

还是什么“两个负数加起来等于正数就溢出”?

那是不是最高位是0的就是负数?如果是的话那来的两个负数啊只有一个吧?

个人观点,,,在用ADD指令进行加法运算时,,如果当作是无符号数运算时,不存在什么,溢出说法,只有进位说法,但如果当做是有符号数运算时,就有溢出的说法,,而ADD加法指令其判断溢出就是判断符号位是否改变,如果变就OF=1,,所以上面就可以理解了,78H符号位为0,86H符号位为1,最终OF=1。8600H符号位为1,9834符号位也为1,最终OF=0,,
而“两个负数加起来等于正数就溢出”? 的原因也是符号位改变了,,
个人观点总结:CPU进行数据运算时,它是按位与位间的相加相减(或,异或之类)等构成我们常说的字节,字运算,,,例如一个,两8位寄存器运算,位与位对应,,所以当运算用我们人类的话来说是出现溢出(超范围是),但对于计算机来说根本就不存在什么溢出的说法,因为它就那么多位,不能自动增加也不能减少,这8位里的各位不是0就是1,它根本就没有什么概念可言,,说到底就是一BIT位控制一个电路的开(1)或关(0),只是人类“自作聪明”硬要说什么“二制数据”,什么“溢出”,什么“进位”!!!
说到这好像有点胡思乱相了,不好意思,,,
所以说到底,,就是机器就是机器哪有人类那么聪明什么懂得什么是“溢出”,而机器只有通过判断那个人类自认的“符号位”来判断是不是人类想要的“溢出”,如果那个位通过先前的运算变了样,,,OF=1,,
所以计算机就是那么的笨,,,,
说到这,你不要以为这个OF就没有什么高效的代表性,,因为像““两个负数加起来等于正数就溢出”? 这种情况下,OF=1就是太有代表性,,

溢出的实际:结果的最高位或者次高位产生进位(只有一个进位,两者都进或都不进则不溢出)
1111 1111
1111 1111
以上两数相加等于1111 1110
即(-1)+(-1)=(-2)
(最高位和次高位都进位,则不溢出)

1、AL=0EH,AH=78H
ADD AH, AL

结果 AH=86H,OF=1

溢出就是因为86H>128(10)
2、8600H+1234H=9834H
没有溢出,是因为
溢出是有符号