首先给一段说明:
OF(Overflow Flag)溢出位:当运算的结果超过字长所能表示的范围时,产生“溢出”。此时,OF置1记为OV(Overflow)。否则,OF清0,记为NV(Non Overflow),溢出产生的原因是由于同号数相加或异号数相减。
第一:
比如你当前的运算的1+1, 那么正确的结果应该是2,但是你的命令1+1=-1.那么就溢出了,这就是同号数相加溢出、
异号数相加的溢出是指:-1-2 ,正确的结果应该是:-3,但是你的命令却是:-1-2=3,那么依旧是溢出
第二:
二进制中所能表达的范围为:-128——127
如果运算结果超出这个值也算溢出,不管有符号没有符号!
如:
无符号数:F0H(240) + 78H(120) = 168H(360)
有符号数:F0H(-16) + 78H(120) = 68H(104)
360超出了8位数所能表示的范围-128~127
104没有超出8位数所能表示的范围,因此有符号数运算时,没有溢出
再如:
无符号数:F0H(240) + 88H(136) = 178H(376)
有符号数:F0H(-16) + 88H(-120) = 78H(-136)
376超出了8位数所能表示的范围
-136也超出了8位书所能表示的范围,因此有符号数与无符号数元算时,都产生溢出
第三:
法则:
1.当两个符号相同的数相加,结果的符号与之相反,则OF=1,否则OF=0.
2.当两个符号不同的数相减,结果的符号与减数相同,则OF=1,否则OF=0.
如果是俩个符号相同的值相减。 里面没有标注出来,那么则表示永远不会溢出。
如果俩个符号位都是正的相加,结果为符号位为负,那么则超出!
如果俩个符号位不同,结果的符号位与减数相同,则超出!
如果俩个符号位不同的相加,则永远不会溢出,
关于符号位 正负的判断,请见我的下一篇博客!
希望这点浅薄的理解能对你有用处
本文章转载自五度博客:http://blog.jsx8.com