2014-10-28 65 views
0

我想在彙編語言中添加兩個十六進制數.one是0fh(十進制15)另一個是0eh(十進制14)。我得到sum = 00011101這是十進制的二進制數29.但我的預期結果是00101001 (其中0010的2二進制值,和1001是9二進制值)。這裏是我的代碼:如何在彙編語言中添加兩個十六進制數字?

name "add-sub" 

org 100h 

mov al, 0fh  ; hex=0fh=dec15 
mov bl, 0eh  ; hex=0eh=dec14 

add bl,al 

mov cx, 8 
print: mov ah, 2 ; print function. interupt er subfunction 
     mov dl, '0' 
     test bl, 10000000b ; test first bit. 
     jz zero 
     mov dl, '1' 
zero: int 21h; find interupt subfunction 
     shl bl, 1 
loop print 

; print hexa suffix: 
mov dl, 'h' 
int 21h 

; wait for any key press: 
mov ah, 0 
int 16h 

ret 

回答

1

你想要得到的結果作爲壓縮BCD-數,但是這不是CPU的正常運行模式。所以你必須轉換結果。你的情況,你可以用AAM做到這一點:

通過

add al,bl   ; Result in AL 
aam    ; AL => AH (first digit) AL (second digit) (unpacked BCD) 
shl ah, 4   ; Prepare AH for ORing 
or al, ah   ; AL to packed BCD 
mov bl, al  ; Copy to BL for following loop 
+0

優秀更換

add bl,al 

如果我沒有錯的或AL = 00101001,這意味着之後我們獲得了我們預期的結果!那麼爲什麼我們需要循環的其餘部分?如果我們直接打印該值,那麼問題是什麼? – user2252617 2014-10-28 19:53:36

+0

@ user2252617:您需要循環將結果轉換爲可打印的ASCII值('0'和'1')。請考慮我**僅根據您的問題糾正了代碼,還有其他問題需要處理;-)。 – rkhb 2014-10-28 20:19:58

+0

感謝您的回答。當我添加兩個數字時,有一件事令人困惑:添加al,bl(al = 3,bl = 2)al的值是多少?它是十進制格式(5)還是二進制格式(00000101)?如果值是二進制格式,那麼shl ah,4在這裏工作(據我所知在潛水29之後10商2是mov到ah並提醒9到人)?如果該值是十進制格式,那麼它將如何用二進制值進行測試?對不起,有很多問題! – user2252617 2014-10-28 20:42:35

相關問題