您好我只想在汇编中添加两位小数,如:
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 ,但是第一个代码的结果写为十六进制。我该如何解决这个问题
由于
答案 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)