匯編--溢出標志 CF與OF


在匯編學習中,個人感覺CF與OF這兩個溢出標志還是有點難理解的。筆者也還是一知半解,若有錯誤之處,

請指正!

 

一、學習CF與OF,要始終牢記一點。CF是無符號數溢出標志,OF是有符號數溢出標志。

通俗一點說就是,即使有符號數相加/相減導致了CF=1也沒什么意義,不能說明結果的正確與否。此時,OF=1,

則說明結果溢出,出現錯誤;OF=0,說明結果正確。這個過程根本和CF沒關系,CF=1/0,都不會影響。同理也

可以得出OF對無符號數也無影響。

舉個例子:

[9-6]補=[9]補-[6]補=[9]補+[-6]補

[9]補-[6]補

00001001

- 00000110

——————

00000011

此時,OF=0,CF=0

 

[9]補+[-6]補

00001001

+ 11111010

——————

1 00000011

此時,OF=0,CF=1

大家可能已經發現了,通過公式將減法轉換成加法,貌似不完全等價,因為CF不同。

其實不然,CF的值不影響結果,此時不論是加法還是減法都是有符號數。不論CF=1/0,只要OF=0,

結果都是正確的。當然,還有一點值得注意。畢竟CF在兩種計算方法中取值不同,如果有條件跳轉

指令的話,程序的執行可能會受到影響。

 

二、簡單介紹下CF與OF的計算方法

1、CF的判斷

①加法

十進制角度,如果兩無符號數相加,結果大於2^n-1(n為位數),則CF=1,否則CF=0;

二進制角度,如果兩無符號數相加,最高位向前有進位,則CF=1,否則CF=0。

②減法

十進制角度,如果兩無符號數相減,減數大於被減數(也即結果不在0—2^n-1內),則CF=1,否則CF=0;

二進制角度,如果兩無符號數相減,最高位向前游借位,則CF=1,否則CF=0。

2、OF的判斷

①加法

十進制角度,如果兩有符號數相加,結果不在-2^(n-1)~2^(n-1)-1內,則OF=1,否則OF=0;

二進制角度,如果兩有符號數同號,而相加結果與之異號,則OF=1,否則OF=0。

②減法

十進制角度,如果有符號數相減結果在-2^(n-1)~2^(n-1)-1內,則OF=1,否則OF=0;

二進制角度,如果兩個數異號,而相減結果與被減數符號相反,則OF=1,否則OF=0。

 

三、這里值得一提的是,在第二部分介紹的計算規則,說白了都是為了方便人的計算。而在計算機中,

CPU根本不知道參與運算的數是有符號的還是無符號的。它只是按照一定的指令、一定的規則來計算,

然后設置標志、運用標志。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM