Как показать дополнение двух чисел - PullRequest
1 голос
/ 16 октября 2019

Я даю два входа и хочу добавить цифры и показать вывод. но здесь он выдает число 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

Я ожидаю 10, когда я ввожу 5 и 5, но получаю j в качестве вывода

1 Ответ

1 голос
/ 17 октября 2019

Я ожидаю 10, когда я ввожу 5 и 5, но получаю 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 инструкций! Больше, конечно, не лучше .

...