2015年9月3日 星期四

溢位跟進位 (overflow & carry)

不知道多少人跟我一樣從學校畢業已久,出社會後因為工作難再碰到一些以前學過的東西,所以久而久之很多東西慢慢忘光光....但寫模擬器最重要的是很多基礎的硬體觀念,了解得越深越多越好,無奈就是很多計概.計組的東西已經還給學校了,要自已重新K回來.

寫模擬器一定會碰到處理器旗幟狀態的處理,這其中又以 溢位 跟 進位 最容易讓人混淆,查了一些資料後,總算釐清. 在此推建 http://www.mouseos.com/arch/Overflow.html 這連結內的解說.

在了解溢位跟進位前,2的補數觀念一定要有才能繼續.

(下面說的是連結內的例子)

簡單來說 , carry 發生在兩數計算結果已經超過數字二進位長度所能表示範圍,這是一件事情.

而overflow發生在兩數計算所得最後結果因為2補數表示範圍關係,造成正負號屬性錯誤,這叫溢位.

4bits長度以2補數來表示一個數字 +7 => 0111 , (+7) + (+7) = 1110 ,變成 -2 , 產生溢位 (超過4bits的2補數能表示範圍),但並沒有產生進位.

(-4) + (-1) = -5 結果正確,但是產生超過4bits位數範圍的晉升.

歸納簡單來說,進位是指針對超過位元容納長度而言這事情(ex.原本4bit,計算完多出一位元到第5bits去),而溢位是指針對超過2補數能表示的正確計算結果範圍而言,超過2補數能表事的結果未必代表產生進位 (ex.沒超過原本4bits範圍,但結果已經不正確,像是正數加正數,變負數,負數加負數變正數的情況).

沒有留言:

張貼留言