首先要知道乙個概念,就是帶符號的數如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...