什麼叫算術溢位?(微機原理狀態標誌暫存器)

時間 2021-08-12 22:46:25

1樓:light0x00

溢位(OF標誌位)是針對有符號數的, 「算術溢位」更準確說應該是「補碼溢位」; 而對於無符號數而言, 只有進製/借位(CF標誌位)

判斷是否會溢位,最簡單的辦法就是,看運算結果是否會超出補碼的表示範圍.

比如8位補碼的表示範圍是: -128~127, 而如下例子中, -128+(-1) = -129 , 這超出了補碼範圍, 所以溢位了.

1000 0000 (補碼值: -128)

+1111 1111 (補碼值: -10111 1111 (補碼值: 127)

需要注意的是, 溢位與進製是完全兩碼事, 進製不一定溢位, 溢位也不一定會進製

如下例子中, 產生了進製,但並沒有產生溢位.

1100 0000 (補碼值: -64)

+1100 0000 (補碼值: -641000 0000 (補碼值: -128)

如下例子中,產生了溢位.但並沒有產生進製.

0100 0000 (補碼值: 64)

+0100 0000 (補碼值: 641000 0000 (補碼值: -128)

理解溢位,更關鍵的是理解補碼, 用「環」來看待補碼, 而不是「取反加一」這種形而上的方式來看待補碼.

把「溢位」這種現象對映到環上, 把a+b這種運算看作是有乙個指標初始指向a,然後轉動了b個單位, b為正就順時針, b為負就逆時針.

-8+(-1), 就是從-8逆時針轉1個單位,到7的位置, 這種情況就溢位了, 因為 -9 超出了負數最大範圍.

這個現象再對映到二進位製上,就是符號位變為了0, 這是因為符號位也參與了運算.

1000 (補碼值: -8)

+1111 (補碼值: -10111 (補碼值: 7)

你也許會責怪CPU 不該讓符號位參與運算, 但事實上, 這是一種「聰明的懶惰」.

仔細觀察上圖的「環」, 你會發現乙個規律:

負數與對應的正數符號相反(似乎是廢話,但其實是強調兩者方向相反)

負數的絕對值 + 正數結果都為 16.

把以上兩個規律對映為動畫, 就是有乙個指標, 正向轉動N mod 16, 和反向轉動 16- (N mod 16) , 兩種情況最終都落在同一處.

如果這個動畫不夠直觀, 你可以想象一下自家的鐘, 時針在6點, 正向轉4 和反向轉8是不是最終都是10點位置?

這種關係被稱為互補,在有16個刻度的環中, 0和16互補, 1和-15互補,2和-14互補......利用這種互補關係的編碼規則,被稱為補碼.

補碼的最大好處, 就是可以讓有符號數和無符號數共享相同的運算電路:

1+15 相當於 1+(-1) , 結果為0 (16對映在環上就是0)

對有符號數來說,這個值剛好; 對無符號數來說產生了進製,CF標誌位被置為1

1+14 相當於 1+ (-2) , 結果為15

對有符號數來說, 這個值代表-1

1+13 相當於 1+(-3), 結果為14

對有符號數來說, 14代表-2

1+8 相當於 1+(-8), 結果為9

對於有符號數來說, 9表示-7

這種物理形態相同(比如在大小為16的環上,-1與15的二進位制是一樣的),但邏輯含義不同(相同的二進位制表達不同的數值)的設計, 也是CPU需要區分OF標誌位CF標誌位的原因.

2樓:空歡喜

分為無符號數和有符號數的溢位

1.無符號數,當最高位向更高位有借位或者進製時,溢位。

2.有符號數,當次高位和更高位異或結果為1時,溢位。

3樓:

如果8位或16位的兩個二進位制數相加,運算時,最高位和次高位只有乙個有進製,就溢位了,OF=1。

例如,補碼運算,兩個正數相加,結果變負數了,就是溢位。兩個負數相加,結果是正數了,也是溢位。

如果8位或16位的兩個二進位制數相減,運算時,最高位和次高位只有乙個有借位,就溢位了,OF=1。

乙個正數減去負數,結果變負數了,是溢位。乙個負數減去乙個正數,結果變正數了,也是溢位。

其它情況不會溢位。

算術幾何是做什麼的?

MathBeginner 簡單來說,算術幾何 arithemetic geometry 是用幾何 或代數幾何 的方法來研究數論的問題。考慮乙個例子,f x x 3 1的解。在complex number這個field下,很容易可以找到它的三個roots。那麼現在,我們把field換一下,考慮在 Z ...

為什麼蜂蜜會冒氣泡並溢位來

周洲家 作為從業者來系統回答下,蜂蜜的氣泡和白沫一直是困擾客戶們的相關問題,因此鬧出的誤會也不少,蜂蜜起沫 有白泡泡的原因主要有以下幾點。1 蜂蜜在釀造過程中會有細微的氣泡產生,所以在一些新鮮的蜂蜜表面,我們總能見到這樣細微泡沫,或者去咱們蜂農的帳篷裡看一下剛取出來的蜜,也有這樣的泡沫,並且蜂蜜具有...

什麼叫「裝」?什麼叫「不裝」?什麼叫「端著」?

滿滿 裝?顯得有點刻意吧。不裝,有時候就是在群體中看上去和大家差不多,沒有令身邊的人不舒服,大家就覺得你不裝,也就說你不裝。端著?面具張臉上拿不下來了,明明想笑,但怕影響自己的影響。故意不笑。這一切又很明顯。 這是一條神奇魚 不懂裝懂,沒本事還吹的叫裝 不懂就是不懂,實在的叫不裝 懂,但是不願意和其...