emu8086 добавить два числа, вывод не ниже 10

Вот код, выводимый даже на два числа ниже 10, но мне нужно знать, что вывод на 10 больше.
Благодарю.

.model small 
.stack 100h
.data
msg1 db "The sum of$"
msg2 db "and$"
msg3 db "is:$"
.code
main proc

mov ax,@data
mov ds,ax

mov ah,9
lea dx,msg1
int 21h

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

mov ah,1
int 21h
mov bl,al 

mov ah,9
lea dx,msg2
int 21h  

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

mov ah,1
int 21h
mov cl,al

mov ah,9
lea dx,msg3
int 21h

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

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

add bl,cl
sub bl,30h

mov ah,2
mov dl,bl
int 21h

main endp
end main

1 ответ

Решение

Поскольку вы по-прежнему имеете дело с односимвольными вводами в диапазоне от "0" до "9", наибольшее число может быть 18 (9 + 9). Простая проверка значения больше 9 сделает свое дело:

    mov  ah, 2    ;DOS display function
    add  bl, cl   ;Sum of 2 characters
    sub  bl, 30h  ;Remove the extra 30h
    cmp  bl, "9"
    jbe  PrintDigit
    mov  dl, "1"
    int  21h
    sub  bl, 10
PrintDigit:
    mov  dl, bl
    int  21h

Почему вы выводите пробел непосредственно после вывода строки? Вы знаете, что вы можете так же легко вставить этот единственный пробел в сообщения!

msg1 db "The sum of $"   <--- See the extra space before the $
msg2 db "and $"          <--- See the extra space before the $
msg3 db "is:  $"         <--- See the 2 extra spaces before the $
Другие вопросы по тегам