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

added two decimals in assembly, but result is hexadecimal

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

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,但是第一个代码的结果是十六进制的。我该如何解决这个问题

谢谢

要解决您的第一个问题,您应该将总和放入 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)