如何显示两个数字的加法

问题描述 投票:0回答:1

我提供了两个输入,并希望将数字相加并显示输出。但是在这里它给出了ascii号作为输出。我该如何解决?

org 100h

mov ah,1
int 21h
mov bl,al

int 21h
mov ch,al

add bl,ch

mov ah,2
int 21h
mov dl,10
int 21h
mov dl,13
int 21h

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

ret

我输入5和5时我希望是10,但是得到'j'作为输出

emu8086
1个回答
0
投票

我输入5和5时我希望是10,但是得到'j'作为输出

当您输入这两个5时,您实际上会收到字符不是数字5!您需要进行转换。简单地减去48就可以完成这项工作。

  org 100h
  mov ah, 01h
  int 21h
  sub al, 48   ;Conversion
  mov bl, al
  mov ah, 01h
  int 21h
  sub al, 48   ;Conversion

一旦您将两个数字相加,则必须将总和转换回1或2个字符,具体取决于总和的值是否大于9。

  add bl, al
  cmp bl, 10
  jb  LessThan10
  mov dl, "1"
  mov ah, 02h
  int 21h
  sub bl, 10
LessThan10:
  add bl, 48   ;Conversion
  mov dl, bl
  mov ah, 02h
  int 21h

如果要在这些操作之间输出回车符和换行符,请确保不要意外破坏后续步骤中所需的寄存器的内容。因此,明智地选择寄存器和/或通过堆栈保存它们。

mov ah,2 int 21h mov dl,10 int 21h mov dl,13 int 21h
mov ah,2 int 21h

请注意,您的代码中有很多多余的int 21h指令! 更多肯定不是更好

© www.soinside.com 2019 - 2024. All rights reserved.