Прежде всего, сделайте себе одолжение и измените имя вашей переменной с число на символ , так как именно это вы теперь и сделали совет других.
С помощью Майкла вы уже исправили несколько вещей в своем коде. Проблемы по-прежнему возникают в следующей части кода:
add character,1 ;moved to outer loop
jnz nextline
Как написано, внешний l oop остановится, когда увеличится размер байта . от значения 255 до 0.
Вам необходимо ограничить повышение символа ; до максимального значения '9'.
Для этого можно использовать инструкцию cmp
:
add character, 1
cmp character, '9'
jbe nextline
Инструкция jbe
будет продолжать возвращаться назад (зацикливаться) до тех пор, пока символ ниже или равен '9'.
Также избегается использование уродливых конструкций, таких как:
‘:' is ASCII for 10
Больше нет необходимости в счетчик в BL
и сохранение DX
вокруг новой строки являются избыточными.
Это ваш исправленный код:
.MODEL MEDIUM
.STACK
.DATA
character DB '0'
.CODE
.STARTUP
mov ah, 02h ; print ASCII char in dl
nextline:
mov dl, '0'
nextchar:
int 21h
inc dl
cmp dl, character
jbe nextchar
mov dl, 13 ; carriage return
int 21h
mov dl, 10 ; line feed
int 21h
add character, 1
cmp character, '9'
jbe nextline
.EXIT
END
Обратите внимание, что символ теперь начинается с '0 '(а не' 1 ').