彙編的進製與溢位

2021-05-28 02:13:33 字數 1308 閱讀 6005

彙編的進製與溢位

對於無符號數來說,不存在溢位的問題,

而對有符號數來說,不存在進製的問題

乙個位元組(8位) 的數有256個 (2的8次方)

乙個字(16位) 的數有65536個 (2的16次方)

8個二進位制位能夠表達的無符號數範圍是:0 ~ 255 

16位表達的無符號數範圍是:0 ~ 65535 

對於無符號數來說,不存在溢位的問題,它的進製就相當於有符號數中的溢位.

進製表示最高位有沒有向上形成進製,或向個形成借位,如果有則進製標誌cf為進/借位數,但結果沒錯。

進/借位數要看 十六進製制、二進位制,進/借的是十六進製制、二進位制的最高位

處理器內部以補碼表示有符號數,

8個二進位制位能夠表達的有符號數範圍是:+127 ~ -128

16位表達的有符號數範圍是:+32767 ~ -32768

如果運算結果超出了這個範圍,就是產生了溢位,有溢位,說明有符號數的運算結果不正確

溢位是指結束超出資料所表示的範圍,通俗地說是裝不下了,比如,兩個帶符號的位元組數127和2相加,結果為-1,因為帶符號的位元組數最大正數為127,所以超過範圍,溢位標誌位of為1,說明出錯了。

對於有符號數來說,不存在進製的問題

例如:3ah + 7ch=b6h,就是58 + 124=182,已經超出-128 ~ 127範圍,產生溢位,所以of=1;另一方面,補碼b6h表達真值是-74,顯然運算結果也不正確。

溢位標誌of和進製標誌cf是兩個意義不同的標誌.進製標誌表示無符號數運算結果是否超出範圍,運算結果仍然正確;溢位標誌表示有符號數運算結果是否超出範圍,運算結果已經不正確。

請看例子

例1:3ah + 7ch=b6h

無符號數運算:58+124=182,範圍內,無進製

有符號數運算: 58+124=182 ,範圍外,有溢位

例2:aah + 7ch=(1)26h

無符號數運算:170+124=294,範圍外,有進製

有符號數運算:-86+124=28 ,範圍內,無溢位

處理器對兩個運算元進行運算時,按照無符號數求得結果,並相應設定進製標誌cf;同時,根據是否超出有符號數的範圍設定溢位標誌of。

應該利用哪個標誌,則由程式設計師來決定。也就是說,如果將參加運算的運算元認為是無符號數,就應該關心進製;認為是有符號數,則要注意是否溢位。

判斷運算結果是否溢位有乙個簡單的規則:只有當兩個相同符號數相加,而運算結果的符號與原資料符號相反時,產生溢位,此時的運算結果顯然不正確。其他情況下,則不會產生溢位。

兩個正數相加得到負數,或是兩個負數相加得到正數,就是溢位了.

乙個正數和乙個負數相加不可能溢位

彙編中的進製和溢位

首先 明白一下幾點 溢位標誌of和進製標誌cf是兩個意義不同的標誌.對於無符號數來說,不存在溢位的問題,它的進製就相當於有符號數中的溢位 而對有符號數來說,不存在進製的問題 溢位是指結果超出資料所表示的範圍,溢位標誌位of為1,說明有符號數的運算結果不正確 問誰知道是有符號的還是無符號的運算額?答 ...

彙編中的除法溢位的解決

說明 除法的指令為div 8位 16位 是8位時,會預設被除數是ax暫存器中的16位,商會儲存在al中,ah儲存餘數 是16位時,會預設被除數是dx 為高位 和ax 低位 組成的32位,商儲存在ax中,餘數儲存在dx中 問題 當有式子1000 1 mov ax,1000 mov bl,1 div b...

彙編 進製轉換

常見的進製範圍表示方法 二進位制數 01 2個數字 逢二進一 0 0 0,0 1 1,1 0 1,1 1 1 0 八進位制數 01234567 8個數字 逢八進一 1 5 6,5 6 13 十進位制數 0123456789 10個數字 逢十進一 1 5 6,5 6 11 十六進製制數 0123456...