在汇编中添加了两位小数,但结果是十六进制

时间:2015-01-03 19:38:28

标签: assembly hex decimal add

您好我只想在汇编中添加两位小数,如:

org 1000  

mov ax,08H
mov bx,05H

add bx,ax
hlt

但是bx寄存器中的结果是 000D ,我想在寄存器 0013 (十进制)中看到。更有趣的是当我尝试使用更高数字的相同代码时,我可以获得十进制结果:

org 1000  

mov ax,52H
mov bx,12H

add bx,ax
hlt 

编译第二个代码后,我在bx寄存器中看到 0064 ,但是第一个代码的结果写为十六进制。我该如何解决这个问题

由于

1 个答案:

答案 0 :(得分: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)