進位標志CF和溢出標志OF的區別:
有符號數和無符號數只是認為的進行區分,計算機從來不區分有符號數和無符號數。對於運算的數來說,只要符合進位的情況,CF就置1.只要符合溢出的情況,OF就置1.但是后續的進行的一些數值判斷等操作,無符號數多依據CF標志進行,有符號數多依據OF標志進行。如比較兩個數的大小,無符號數根據CF標志進行,有符號數依據OF標志進行。
• 計算機硬件判斷溢出的方法如下:
最高位有進位但次高位沒有進位,或者最高位無進位但次高位有進位;也就是最高位和次高位一個有進位一個無進位。(最高位和次高位進位不一致的時候溢出)
• 我們不是機器不使用這么機械的方法,可以使用如下規則(匯編教材第二版第19頁):
只有當兩個相同符號數相加(含兩個不同符號數相減),而運算結果的符號與原數據符號相反時,產生溢出。
• 例如:3AH+7CH=00111010B+01111100B=10110110B=B6H
次高位一個是0一個是1,但還有一個低位進位1,所以次高位有進位;最高位兩個0,還有次高位進位,結果只是1沒有進位,所以計算機判斷有溢出。
我們判斷,看最高位,兩個數最高位相同為0,相加后結果最高位為1,所以有溢出。
再如:3AH+8DH,我們可以馬上判斷出沒有溢出。因為這是兩個不同符號數相加。
利用調試程序可以幫助你驗證。
將數據按有符號數進行補碼變換求出對應十進制真值,然后判斷也可以,但比較麻煩,不如上述規則簡單明了
參考資料:
http://www5.zzu.edu.cn/qwfw/ynjd/clqjg/4a44c05f3f5a870e013f6424857a043d.html