使用 FASM 将用户输入的两个数字相加
Addition of two numbers from user input using 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
的 ASCII 值(0x34
).
现在,要将它们相加,您需要将它们转换为值。通过减去 0x30
.
sub bl, 30h
sub bh, 30h
现在bl = 3, bh = 4
。只需将它们加在一起即可。
add bh, bl
现在bh = 7
。将其转换为数字的 ASCII 值并显示给用户。那部分你已经做对了。
add bh, 30h
...
总结:
- 读取一个数字后,减去
30h
。
- 在打印数字之前,添加
30h
。
我已成功获得用户的输入并将其放入 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
的 ASCII 值(0x34
).
现在,要将它们相加,您需要将它们转换为值。通过减去 0x30
.
sub bl, 30h
sub bh, 30h
现在bl = 3, bh = 4
。只需将它们加在一起即可。
add bh, bl
现在bh = 7
。将其转换为数字的 ASCII 值并显示给用户。那部分你已经做对了。
add bh, 30h
...
总结:
- 读取一个数字后,减去
30h
。 - 在打印数字之前,添加
30h
。