热门问题
时间线
聊天
视角
溢位旗標
来自维基百科,自由的百科全书
Remove ads
溢位旗標(overflow flag)是電腦處理器中,標示是否出現算術溢位的位元,一般會放在狀態暫存器的某個位元。溢位是指此運算的結果無法用二補數配合目前的位元個數儲存。有些處理器會在出現溢位時自動產生例外。
假設,在8位元的暫存器中計算127加127,127+127是254,用二進制表示會是1111 1110,但在二補數下的二進制下,此數為是-2。兩個正數相加,結果是負數,即為溢位(兩個負數相加,結果是正數也是)。此時會設定溢位旗標,表示有此問題,程式可以輸出錯誤,或是用其他方式緩解此影響。若二個同符號的數相加,結果符號位元改變,即為溢位。若是異號的數相加,不會出現溢位[1]。
當二進制數字表示為無號數時,溢位旗標沒有意義,一般會忽略。二補數算術的一個好處是其加法和減法不需區分有號數和無號數。因此,大部份的指令集不會區分有號和無號的運算元,每一個指令都會更新有號數的溢位旗標和無號數的進位旗標,讓後面的指令去處理相關的旗標[2]。
內部來看,溢位旗標是移進和移入符號位元之進位旗標的邏輯異或。
位操作(and、or、xor、not、位元旋轉)沒有針對有號溢位的標示,不同的處理器架構會有不同作法。有些處理器會無條件的清除溢位旗標(因為位元運算的範圍也包括符號位元,清除溢位旗標表示符號位元有效),有些則不會變更溢位旗標,或是視為未定義行為。位元移位和乘法是對溢位有明確的定義,但各處理器不一定都會實施。例如X86指令只定義乘法和一位元位移下的溢位旗標,多位元位移則不定義。
Remove ads
參考資料
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads