Функция ввода символов DOS дает вам символов .
Когда вы вводите 1 DOS представляет вам AL='1'
, что означает, что вы получите 49, где вы можете ожидать 1.
Когда вы вводите 2 DOS представляет вам AL='2'
, что означает, что вы получите 50, где вы могли бы ожидать 2.
Когда вы вводите 5 DOS представляет вам AL='5'
, что означает, что вы получите 53, где вы можете ожидать 5.
Вот почему в этих случаях мы вычитаем 48.
Enter:
mov ah, 1
int 21h
mov bl, i
mov bh, 0
SUB AL, '0' ;Same as SUB AL, 48
mov array[bx], al
Таким образом, ваш массив будет содержать значения 1, 1, 2 и 5 (больше не будет символов «1», «1», «2» и «5»)
Теперь вы можете спокойно делать дополнения, получая 9.
Поскольку sum теперь содержит значение 9, но вам нужен символ '9', вы просто добавляете 48, чтобы выполнить преобразование:
mov dl, sum
ADD DL, '0' ;Same as ADD DL, 48
mov ah, 02h
int 21h