2015-01-03 33 views
-4

您好我只是想在集添加兩位小數,如:加入裝配兩位小數,但結果是十六進制

org 1000 

mov ax,08H 
mov bx,05H 

add bx,ax 
hlt 

但結果在BX寄存器000D,我想在寄存器中看到(十進制)。更有趣的是,當我嘗試用更高的數字相同的代碼,我可以得到小數結果:

org 1000 

mov ax,52H 
mov bx,12H 

add bx,ax 
hlt 

編譯第二代碼後,我看到在BX寄存器,但與第一碼結果被寫爲十六進制。我該如何解決這個

感謝

+2

錯誤...兩個輸出均以十六進制表示形式顯示。 –

+0

但十六進制符號52 + 12不應該是64! –

+0

@Soyaslan你錯了; 「0x52 + 0x12 = 0x64」。你看,當你指定'52H'時,這意味着「我指定一個***十六進制***文字,其值爲52(十六進制)。」這就是'H'的意思。 – apnorton

回答

1

解決您的第一個問題,你應該把總和AL寄存器。

mov bl,8 
mov al,5 
add al,bl 
aaa 
aad 16 ; --> AL contains 0013(decimal) 

第二個問題可以通過首先計算十分之一(存儲在AL一個額外寄存器中),然後計算單位,然後既與另一個aad 16組合來解決。

如果你的彙編不知道指令aad 16你可以db 0D5h,10h

我忽略了一個更好的解決方案,會爲這兩個問題的工作,用它替換!

mov bl,8 
mov al,5 
add al,bl 
daa ; --> AL contains 0013(decimal) CF=0 

mov bl,52h 
mov al,12h 
add al,bl 
daa ; --> AL contains 0064(decimal) CF=0 

mov bl,52h 
mov al,19h 
add al,bl 
daa ; --> AL contains 0071(decimal) CF=0 

mov bl,52h 
mov al,59h 
add al,bl 
daa ; --> AL contains 0011(decimal) CF=1 --> 0111(decimal)