彙編中的進製和溢位

2021-06-06 18:18:25 字數 1021 閱讀 7095

首先 明白一下幾點:

溢位標誌of和進製標誌cf是兩個意義不同的標誌.

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

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

溢位是指結果超出資料所表示的範圍,溢位標誌位of為1,說明有符號數的運算結果不正確

問誰知道是有符號的還是無符號的運算額?

答:處理器對兩個運算元進行運算時

按照無符號數求得結果,並相應設定進製標誌cf;

同時,根據是否超出有符號數的範圍設定溢位標誌of。

即 cf 和 of 是根據無符號 有符號表示的範圍 設定的。

應該利用哪個標誌,則由程式設計師來決定。

也就是說,如果將參加運算的運算元認為是無符號數,就應該關心進製;

認為是有符號數,則要注意是否溢位。

進製標誌表示無符號數運算結果是否超出範圍,運算結果仍然正確;

溢位標誌表示有符號數運算結果是否超出範圍,運算結果已經不正確。

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

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

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

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

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

舉個常見的例子

3ah + 7ch=b6h

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

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

aah + 7ch=(1)26h

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

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

判斷運算結果是否溢位有乙個簡單的規則:

1 兩個正數相加(或乙個正數減乙個負數)得到負數,就是溢位了.

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

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

彙編的進製與溢位

彙編的進製與溢位 對於無符號數來說,不存在溢位的問題,而對有符號數來說,不存在進製的問題 乙個位元組 8位 的數有256個 2的8次方 乙個字 16位 的數有65536個 2的16次方 8個二進位制位能夠表達的無符號數範圍是 0 255 16位表達的無符號數範圍是 0 65535 對於無符號數來說,...

彙編中的除法溢位的解決

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

CPU如何區分溢位和自然進製?

之前學習補碼的時候倒是學會了基本概念,但是最近又接觸時發現還有不清楚的地方,所以又研究了下 今天的核心問題的 cpu是如何區分高位自然捨棄和溢位的?先給出結論 如果運算中,數值位最高位 也就是有符號數的正數第二位 和符號位 也就是正數第一位 同時進製,則是自然捨棄。兩者間如果只有乙個進製,則是溢位。...