【问题标题】:Arithmetic Addition算术加法
【发布时间】: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 解压 BCD 12 (AH=1, AL=2) 和 mov bx, 0x0203 解压 BCD 23?因为这样的输入是 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

标签: assembly x86-16


【解决方案1】:

先生,我们直到现在才知道 ;(

【讨论】:

  • 谁是“我们”,这对 OP 或任何其他未来的读者有何帮助?如果您不知道如何回答,请不要发布任何内容。
猜你喜欢
  • 2019-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多