Assembly 使用FASM从用户输入中添加两个数字

Assembly 使用FASM从用户输入中添加两个数字,assembly,addition,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 2

我已成功获取用户的输入并将其放入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
(即
0x33
)的ASCII值,将
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

如果您不擅长编程,我建议不要使用汇编。你似乎没有很好地理解数字(数字)和它的ASCII表示之间的关系。这是学校要求的。我没什么事可做it@user202729:像你这样的评论使Stackoverflow成为一个很难获得帮助的地方。你认为他可能是一名学生吗?在世界某些地区的学术界,以这样或那样的形式学习汇编是非常普遍的,即使是对于较旧的处理器也是如此。@MichaelPetch。。。那么OP的老师在布置作业之前一定已经仔细地教过了。@MichaelPetch你用这些知识干什么?谢谢!现在它开始工作了。很抱歉打扰您,因为您先减去2·0x30,然后再加上0x30,您只需减去0x30即可进行一些小优化。:)