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