組合語言中ADD加法指令的問題關於組合語言中ADD指令的問題

2021-05-13 20:17:48 字數 2420 閱讀 7332

1樓:閭丘芷荷乙曾

1.0ac72h只是一個表示方法,跟ac72h是一樣的含義。ax裡還是儲存16位的值。

之所以在前面多加一個0,是因為編譯器不識別以字母開頭的立即數。

算是立即數表示的一種規則吧,或者可以理解為是一種語法規則。

只要是十六進位制數的(最後加h),首位又是字母的,必須前面新增個0。

這樣也不容易引起歧義。

如果不習慣加0,那mov

al,dh這個指令怎麼識別呢?

是把8位暫存器dh裡的值交給al?還是把十六進位制數0dh交給al呢。。。

所以建議你養成這樣的習慣。

2.0f表示溢位,實際上是把add指令作為有符號數加法指令。ax開始是正數(最高位0),bx也正數,相加結果超過了能識別的最大正數(7fffh),所以溢位了。

2樓:革盼秋宇恬

89h+

89h=

112h,而al最大是ffh,產生溢位後就生產丟失現象,只保留低位。

要想不丟失,可改為:

xorah,ah

addax,al

則ax是正確的112h

其他高階語言也一樣,在宣告變數和計算時要考慮數字溢位問題(宣告的是short型變數,給的卻是int型值,得到的也只會是short型的值即丟失或報錯)

3樓:做而論道

無論,是有符號還是無符號的,演算法都是相同的。

即:89h + 89h = (1)12h。

相當於無符號:137 + 137 = 274 = 256 + 18。 256 即為進位 1。

相當於有符號:(-119) + (-119) = +18。 溢位,結果無效。

換一個數,再試試,有符號數,也可以得出正確的結果。

4樓:匿名使用者

不是的,雖然算數運算指令主要用來對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,表示有溢位,指出了這一錯誤。

希望能幫到你。

5樓:匿名使用者

無符號數的範圍是0-255,有符號數是-128 - 127.應該預設是無符號數,另外標誌暫存器裡有個of位它是針對有符號數的,如果是mov al,7fh add al,1 of位會置1 顯示有符號數溢位,因為7fh+1=128大於了有符號數的表示範圍。

6樓:夕見的

將al的內容直接相加(注意的是要進行的是十六進位制的加法,而不是十進位制的)後送到al暫存器中

關於組合語言中add指令的問題

7樓:匿名使用者

1. 0ac72h只是一個表示方法,跟ac72h是一樣的含義。ax裡還是儲存16位的值。

之所以在前面多加一個0,是因為編譯器不識別以字母開頭的立即數。

算是立即數表示的一種規則吧,或者可以理解為是一種語法規則。

只要是十六進位制數的(最後加h),首位又是字母的,必須前面新增個0。

這樣也不容易引起歧義。

如果不習慣加0,那mov al,dh這個指令怎麼識別呢?

是把8位暫存器dh裡的值交給al?還是把十六進位制數0dh交給al呢。。。

所以建議你養成這樣的習慣。

2. 0f表示溢位,實際上是把add指令作為有符號數加法指令。ax開始是正數(最高位0),bx也正數,相加結果超過了能識別的最大正數(7fffh),所以溢位了。

8樓:匿名使用者

那個0確實可以省略,這裡只是告訴你是十六進位制的意思。至於那個1的溢位,這裡應該是兩個有符號數的相加,加後應該有進位,換句話說兩個整數相加(注意以0開頭的表示整數)相加後有一個僅為1(以1開頭的為負數)。兩個整數相加不可能成為負數,所以溢位位為1.

9樓:匿名使用者

執行後ax為什麼不是等於ac72h:因為常數總是要以一個數字開頭(若十六進位制的第一個數為「a~f」字元,則前面要加0)

10樓:陽光上的橋

0ac72h就是你想像的ac72h,左邊的0可以省略,但是標準的16進位制數應該在前面加0,你的ac72看起來象個單詞,不再是一個數。

組合語言資料偽指令DUP用法,組合語言中的dup有什麼作用

10 dup 1 重複定義了10個字元素,初始值為1,佔用10 2 20個位元組。5 dup 重複定義了5個字元素 其初始值實際為0 佔用5 2 10個位元組 因此總共佔用30個位元組。具體分析 在彙編定義變數的時候會用到dup,變數名 型別 初值表,dup用於把一個相同值賦值若干次,重複次數 du...

組合語言中out和in的用法,組合語言中OUT和IN的用法

在8086系列的組合語言中 in指令的意思是從埠中讀取資料,比如 in al,80h,將80h埠資料讀入到al中 out指令的意思是往埠輸出資料,比如 out 80h,al,將al輸出到80h埠 組合語言中,cpu對外設的操作通過專門的埠讀寫指令來完成 讀埠用in指令,寫埠用out指令。例子如下 i...

組合語言中為什麼要有十進位制調整指令,原因是什麼

cpu 的運算指令,是按照二進位制數進行計算的。參加運算數字,如果,你用的是 bcd 碼,那麼,運算結果,也就變成了一般的二進位制數。難道,你不想把它們,再變成 bcd 碼?十進位制調整指令計算 執行完aam指令後 ah暫存器的值等於al暫存器的值 除以 值0ah 類似c ah al 0xa al暫...