mov al,1 <-- function number goes in AH
int 21h
add bl,al
Когда вы запрашивали второй символ, вы допустили ошибку при сохранении номера функции в AL
, где он должен был быть AH
.Хотя API DOS не упоминает, что AH
изменится с этой функцией, вы не можете поверить, что это правда.
mov ah, 1
int 21h
mov bl, al
mov ah, 1
int 21h
add bl, al ; This now contains 2 times '0'
sub bl, '0' ; Here you correctly subtract 1 of those
mov dl, bl
mov ah, 2
int 21h
То, как вы работали с этим единственным sub bl, '0'
, хорошо и немногокороче, но большинство людей решит это так:
mov ah, 01h
int 21h ; eg. input '3'
sub al, '0' ; '3' - '0' = 3
mov bl, al ; 3
mov ah, 01h
int 21h ; eg. input '5'
sub al, '0' ; '5' - '0' = 5
add bl, al ; 3 + 5 = 8
mov dl, bl
add dl, '0' ; 8 + '0' = '8'
mov ah, 02h
int 21h ; outputs '8'
НО все вышеперечисленное будет работать тогда и только тогда, когда вы введете 2 однозначных числа, чьисумма на самом деле меньше 10. Если это не так, вам нужно вывести более 1 символа, чтобы показать результат сложения.
Посмотрите здесь , чтобы увидетькак вы можете справиться с дополнениями, которые доходят до 99.