正溢位 與 負溢位對指令的測試條件的證明

2021-05-25 06:59:12 字數 860 閱讀 3099

首先要知道乙個概念,就是帶符號的數如8位二進位制的表示範圍為 -128~127

-128的補碼與128的補碼是一樣的。(對於零界的-***對應的***的補碼都是一樣的)

16位二進位制的補碼表示數的範圍

-32768d|   +32767

(8000h)|   (7fffh)

|(------->|       <-------)

負數---負溢位---|->                  正數

|<--|正溢位----

------|------

-1d|+1d

(ffffh)|   (0001h)

如此:對於要求《的jl指令(檢測帶符號數的),他的測試條件為 : sf異或of = 1;

則可用上面的圖證明出:

如:mov ax,a

cmp a,b

jl x

//(a)=a ; (b)=b;

①:當a>b時

a=0101h, b=1100h,

a-b=1001 (溢位) 

此時,sf =1, of = 1;表明是正溢位,結果自然就是錯誤的。

這樣的話,與jl的測試條件不符。

②:當a>=b時(未溢位的例子)

sf = 0, of = 0,這樣的話 與jl的測試條件不符

③:當aa=1100h , b=0101h

a-b=0111h(溢位)

此時,sf=0 , of = 1;

可見,與jl的測試條件相符

④:當a未溢位,則sf =1, of =0;

可見,與jl的測試條件相符。

通過分析可知,jl的測試條件sf異或of = 1;可檢測無論是否溢位時的a

彙編的進製與溢位

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

資料溢位的分析與計算

在計算機中,當要表示的資料超出計算機所使用的資料的表示範圍時,則產生資料的溢位。要想很好的避免這個問題,首先我們需要了解常用的資料型別的取值範圍 1.c語言的基本資料型別及其取值範圍 資料型別 所佔位數 取值範圍 signed char 8 2 7 2 7 1 unsigned char 8 0 2...

scanf的溢位控制與替代使用

如果str在堆中申請的空間較小,使用scanf s str 時,很容易發生溢位,怎麼解決呢?include include int main int argc,char argv 輸出結果如下 centos7 at localhost test1 scanf please input 10 at m...