1樓:小虎愛數電
7eh是01111110b,而22h是00100010b,兩數均為正數 相加會溢位(超過127)
10h是00010000b為正數,而90h是10010000b為負數 相加不會溢位
溢位只會發生在兩個正數相加 兩個負數相加 或者一正一負相減
2樓:匿名使用者
al是8位,你先看你的第一段**:mov al,10h ;add al,90h 。執行之後al裡面的值用二進位制表示為1010,0000。表示為十六進位制為a0 。
再看第二段:mov al,7eh ;add al,22h 。執行後,al裡面的值用二進位制表示為 1010,0000。表示為十六進位制為a0。
其實兩段**都沒有發生溢位。因為一個十六進位制**對應4個二進位制位。
你的第一段**執行時,個位相加為0,十位相加為10用十六進位制表示為a;
第二段**執行時,個位相加為16,十六進位制滿16進1,所以個位現在為0並向十位進1,十位相加為9,但加上進位位就成了10,也即十六進位制的a。
所以兩個都沒有發生溢位。如果要發生溢位,十位之和必須大於等於16才行。
3樓:陽光小衚衕
(以8位為例)表示 >=0的數,表示範圍是0------11111111b,即十進位制的0----256,十六進位制的00h-----0ffh;而什麼是有符號數呢?有符號數即可正可負的數,在計算機中有符號書的表示為:作高位為符號位,1表示符號,0表示正號;如+127,則二進位制表示為01111111b,而-127則表示成10000001b;
若假設兩個無符號數相加,若高位相加有進位情況,成為益處,則此時,cf為1,所以可以說cf可表示無符號數的溢位;若假設兩個有符號數相加,如兩個負數相加,則高位都為1,則1+1=0,(有進位),但大家看到,兩個負數相加,現在結果既然是正數,顯然出錯,所以用of來標誌錯誤,所以,cf可表示無符號數的溢位,of可表示有符號數的溢位
組合語言中of與cf的區別
4樓:匿名使用者
組合語言中:
of是溢位位,of=1或0,表示運算結果有無溢位。當算術運算的結果超出了帶符號數的範圍(8位帶符號數的範圍是-128——+127,16位的是-32728——+32767)。
cf是進位標誌位cf=1或0,表示加減法操作中最高位有無進借位。
5樓:沙裡波特
樓主提出此問題,原因,往往是溢位和進位,搞不清楚。
以八位二進位制為例。
代表無符號數:0~255。如果運算結果超出 255,稱為:進位。cf 會置位。
代表有符號數:-128~127。如果運算結果超出範圍,稱為:溢位。of 會置位。
6樓:匿名使用者
of的設定,以加法為例,如果兩數符號相同,結果卻相反,則of=1;否則of=0;(如果兩數符號相反,是不會溢位的)。
cf的設定,最高有效位(bit7,比如)向高位進位則為1,否則為0。所以實際上of是表示有符號數的溢位,cf是表示無符號數的溢位。
理解進位,從af位的設定更為容易。
例:a的補碼與b的補碼計算後(加減)為c的補碼把c的補碼看成無符號數,意義與c相同就是cf=0否則cf=1把c的補碼看成有符號數,意義與c相同就是of=0否則of=1
組合語言有符號和無符號
7樓:
二進位制數本身不能反映出它是有符號數還是無符號數,是不是有符號數完全取決於程式設計師的需要。程式設計師認為它是有符號數,它才是有符號數,程式設計師認為它是無符號數,它就是無符號數,哪怕最高位是1。
只有程式設計師認為某個二進位制數是有符號數時最高位才是符號位!
136的二進位制是(10001000)b
如果認為它是有符號數:最高位是1,表示它是個負數,按負數的轉換方法可知,(10001000)b=(-120)d
如果認為它是無符號數,(10001000)b=(136)d
8樓:匿名使用者
要理解無符號數與有符號數,在腦筋沒轉過彎來時確實難了點。
但是要理解of就簡單了
0111 1101 7dh,為al初值
-1000 1000 88h,為al=7dh+0bh,為終值看最高位也就是你說的符號位,由 0 變成了 1 ,有變化,這時of=1。
引出:符號位有變化則有溢位,沒變化則沒溢位。(簡單吧)
組合語言中add加法指令的問題
9樓:閭丘芷荷乙曾
1.0ac72h只是一個表示方法,跟ac72h是一樣的含義。ax裡還是儲存16位的值。
之所以在前面多加一個0,是因為編譯器不識別以字母開頭的立即數。
算是立即數表示的一種規則吧,或者可以理解為是一種語法規則。
只要是十六進位制數的(最後加h),首位又是字母的,必須前面新增個0。
這樣也不容易引起歧義。
如果不習慣加0,那mov
al,dh這個指令怎麼識別呢?
是把8位暫存器dh裡的值交給al?還是把十六進位制數0dh交給al呢。。。
所以建議你養成這樣的習慣。
2.0f表示溢位,實際上是把add指令作為有符號數加法指令。ax開始是正數(最高位0),bx也正數,相加結果超過了能識別的最大正數(7fffh),所以溢位了。
10樓:革盼秋宇恬
89h+
89h=
112h,而al最大是ffh,產生溢位後就生產丟失現象,只保留低位。
要想不丟失,可改為:
xorah,ah
addax,al
則ax是正確的112h
其他高階語言也一樣,在宣告變數和計算時要考慮數字溢位問題(宣告的是short型變數,給的卻是int型值,得到的也只會是short型的值即丟失或報錯)
11樓:做而論道
無論,是有符號還是無符號的,演算法都是相同的。
即:89h + 89h = (1)12h。
相當於無符號:137 + 137 = 274 = 256 + 18。 256 即為進位 1。
相當於有符號:(-119) + (-119) = +18。 溢位,結果無效。
換一個數,再試試,有符號數,也可以得出正確的結果。
12樓:匿名使用者
不是的,雖然算數運算指令主要用來對8位無符號資料進行算術操作,但也同樣用於帶符號數的。
在加法運算中,若位7有進位,則進位位cy置1,否則清0;若位3有進位,則半進位位ac置1,否則清0。若看作2個帶符號數相加,還需判斷溢位位ov;若ov為1,表示和數溢位。
例如:a=aeh,r1=81h,執行指令「add a,r1」,則操作如下所示。
1 0 1 0 1 1 1 0
+ )1 0 0 0 0 0 0 1
——————————
1 0 0 1 0 1 1 1 1
結果:a=2fh,cy=1,ov=1,ac=0,p=1。
此例中,若把aeh、81h看作無符號數相加,則結果為12fh(在看作無符號數時,不考慮ov位);若將上述2值看作有符號數,則有「2個負數相加得到正數」的錯誤結論,此時,ov=1,表示有溢位,指出了這一錯誤。
希望能幫到你。
13樓:匿名使用者
無符號數的範圍是0-255,有符號數是-128 - 127.應該預設是無符號數,另外標誌暫存器裡有個of位它是針對有符號數的,如果是mov al,7fh add al,1 of位會置1 顯示有符號數溢位,因為7fh+1=128大於了有符號數的表示範圍。
14樓:夕見的
將al的內容直接相加(注意的是要進行的是十六進位制的加法,而不是十進位制的)後送到al暫存器中
請問組合語言中符號代表什麼,在組合語言裡 符號代表什麼意思?
離 f最近的一個 標號 就是把最近的 標號所標出的地址值入棧 是間接定址用的,可以理解為取地址,一般後面為r0 r7 兆初晴謬美 看圖你就會明白。實際上標號x1的首地址為ascii碼c的字單元地址,x2的首地址開始於db16dup 語句,緊接著x1的終止地址,那麼它的首地址相對於x1偏移4 1個位元...
關於組合語言中的loop指令,關於組合語言中的LOOP指令
這個程式迴圈一次,是由cx存放的。cx中存放的是迴圈的次數 程式設計計算2 12 assume cs code code segment mov ax,2 mov cx,11 s add ax,ax loop s mov ax,4c00h int 21h code ends end執行loop s時...
關於組合語言移植性的問題,關於組合語言中的LOOP指令
兄弟,你理解錯了,首先你要明白,組合語言是一種針對具體機器的低階語言,這裡說的不同機器一般來講是指cpu指令系統不相相容的兩種機器,比如常用的8086與51,dsp,arm,等等,他們的指令系統都不是通用的。自然移植到別的機器上不行,舉個例子來說吧,假如51,的p0埠可以用來點亮一盞燈,但是對808...