Как использовать для цикла в сборке? - PullRequest
0 голосов
/ 23 марта 2019

Мне было поручено создать код, который выводил бы равное количество текста здесь в зависимости от ввода пользователя. Тем не менее, я, кажется, сбит с толку моей функцией cmp.

;Get keyboard input
mov ah, 01h 
int 21h

;Save to bl for later use
mov bl, al
jmp isa

isa:
mov ah, 09h 
mov dx, offset text 
int 21h

cmp bl, bl
jne isa
je exit

То, что я получаю с этим кодом, - это только один вывод 'Text' независимо от того, какое число я ввожу.

РЕДАКТИРОВАТЬ: Я пытался это, но теперь мой вывод бесконечен: (

isa:
inc bl
mov ah, 09h 
mov dx, offset ulit 
int 21h


cmp bl, 30h
jne isa
je exit

1 Ответ

0 голосов
/ 25 марта 2019

Прежде всего, убедитесь, что вы инициализируете регистр BX на ноль, прежде чем начать цикл:

...
xor bx,bx
isa:
...

Чтобы избежать прерывания DOS для перезаписи содержимого вашего (используемого) регистра BX, защитите его в стеке (не уверен насчет соглашений о вызовах прерываний DOS, это было слишком давно для меня):

...
push bx
int 21h
pop bx
...