【问题标题】:Addition of two 8-bits number in 8086 using MASM使用 MASM 在 8086 中添加两个 8 位数字
【发布时间】:2018-02-11 05:43:43
【问题描述】:

这是我使用 MASM 在 8086 中编写的代码。该代码用于两个 8 位数字的简单相加(无需担心进位)。我给以下程序输入了两个数字: 31h 和 16h 。输出应该是 47h,但它给我的输出是'w'。如果我取一些不超过 9 的数字,代码可以正常工作,有人可以在这里指出我的错误吗?

代码:

data segment
   n1 db 31h
   n2 db 16h
data ends

code segment
 assume cs:code, ds:data
  start:

   mov ax,data
   mov ds,ax

   mov al,n1
   mov bl,n2
   add al,bl

   add al,30h
   mov dl,al

   mov ah,02h
   int 21h

   mov ah,4ch
   int 21h

code ends
end start

【问题讨论】:

标签: assembly masm x86-16 microprocessors emu8086


【解决方案1】:

在你添加你想要的两个常量之后,你add al,30h,给你一个值77h。这是w 的 ASCII 代码,然后您将其打印为 ASCII 字符而不是数字。

【讨论】:

  • 但如果我从代码中删除add al,30h 行,则不会打印输出。那我怎么打印那个输出呢?
  • 将结果字节转换为两个十六进制数字。未打包的 BCD 算术可能会有所帮助,或者如果有可以调用的库函数,请使用它。
  • 您尝试做的是将'0' 的ASCII 值添加到您的字节中。您实际上想将字节分成两个 半字节,如果半字节小于 10,则添加 '0' (30h),如果半字节为 10,则添加 'A'-10 (37h)或更高。
  • 对两个半字节都这样做,你会得到'0''9''A''F'的ASCII码。但仅添加 30h 仅适用于小于 10 的数字 (Ah)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-05
  • 1970-01-01
相关资源
最近更新 更多