assembly - 使用 FASM 将用户输入的两个数字相加

标签 assembly addition fasm

我已成功获取用户的输入并将其放入 bl 和 bh 中,但是当我尝试将它们加在一起时,即使我已经将“0”添加到结果中,结果也不是十进制形式。关于如何解决这个问题有什么想法吗?谢谢

org 100h

mov ah, 9
mov dx, msg
int 21h

mov ah, 1
int 21h

mov [number], al
mov bl, [number]

mov ah, 2
mov dl, 0ah
int 21h

mov ah, 9
mov dx, msg2
int 21h

mov ah, 1
int 21h

mov [number], al
mov bh, [number]

add bh, bl
add bh, 30h

mov ah, 2
mov dl, 0ah
int 21h

mov ah, 9
mov dx, sum
int 21h

mov ah, 2
mov dl,bh
int 21h

mov ax, 4C00h
int 21h

msg db 'Enter first number: ', 24h
msg2 db 'Enter second number: ',24h
sum db 'The sum is: ',24h
number db 0

最佳答案

您似乎误解了 ASCII 代码和值之间的关系。

假设用户输入34。在您的代码中,您将 bl 设置为字符 3 的 ASCII 值(即 0x33)和 bh转换为字符 4 (0x34) 的 ASCII 值。

现在,要将它们加在一起,您需要将它们转换为值。减去 0x30

sub bl, 30h
sub bh, 30h

现在bl = 3,bh = 4。只需将它们加在一起即可。

add bh, bl

现在bh = 7。将其转换为数字的 ASCII 值并显示给用户。这部分你已经做对了。

add bh, 30h
...

总结:

  • 读取一个数字后,减去30h
  • 在打印数字之前,添加 30h

关于assembly - 使用 FASM 将用户输入的两个数字相加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48605651/

相关文章:

javascript - 使用 javascript 根据 URL 添加不同的文本

assembly - FASM 是否使用 Intel 语法?

assembly - memcmp 忽略奇数位置的字符

java - 无用的测试指令?

c++ - C++ 如何将命令行参数转换为数组?

Java array.add() 停止程序

target - 使用 FASM 的 Mach-O 二进制文件

linux - 自修改代码总是在 Linux 上出现段错误

gcc - 内联汇编错误,阻止 gcc 编译尝试

java - ArrayList.add 方法不起作用