2014-10-28 46 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

相关问题