首先給一段說明:
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