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 $