我试图在汇编语言中添加两个十六进制数。一个是0fh(十进制15)另一个是0eh(十进制14)。我得到的总和= 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
答案 0 :(得分:1)
您希望将结果作为打包的BCD编号获得,但这不是CPU的正常操作模式。所以你必须转换结果。在您的情况下,您可以使用AAM
:
替换
add bl,al
通过
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