【发布时间】:2023-01-10 20:33:40
【问题描述】:
我想在两个寄存器上做加法。它正确显示结果,直到加法结果小于 20。当结果超过 20 时。程序显示垃圾值:
这是代码
mov ax, 10
mov bx, 9
add ax, bx
aaa
mov bx, ax
add bl, 48
add bh, 48
mov ah, 02
mov dl, bh
int 21h
mov ah, 02
mov dl, bl
int 21h
我做错了什么? :'(
【问题讨论】:
-
您使用什么输入来获得高于 20 或更高的输出?像
mov ax, 0x0102解压 BCD12(AH=1, AL=2) 和mov bx, 0x0203解压 BCD23?因为这样的输入是aaa旨在之后清理的;查看文档以了解它的工作原理,检查 AL & 0xF > 9,如果是,则递增 AH 并包装 AL。 felixcloutier.com/x86/aaa。您的问题显示了工作代码,而不是 minimal reproducible example。虽然我们已经可以看到 BCD 指令aaa的“滥用”,但在将0x000a添加到某物之后使用它,并且 AL=10 不是单个十进制数字。 -
如果 unpacked-BCD 不是您想要使用的整数格式,则对二进制整数使用普通的
add并使用除以 10 得到十进制数字:Displaying numbers with DOS