Сборка Как зациклить символ в пользовательском счетчике - PullRequest
0 голосов
/ 21 февраля 2019

Я новичок в сборке 8086 (используя DosBOX).У нас есть задание для получения следующего: См. Это изображение.

Я попытался сделать это, и это мой пример кода.

mov ah,9
lea dx,[100]    // Enter a character: $
int 21h
mov ah,1
int 21h
mov bl,al
mov ah,9
lea dx,[120]    // Enter a number: $
int 21h
mov ah,1
int 21h
mov [si],al
mov cx,[si]
mov ah,2        // 14e
mov dl,bl
int 21h
inc cx
loop 14e

Проблема возникает, когда яввод числа после ввода числа.Он отображает правильный символ, который я ввел, но не останавливается на необходимом количестве циклов.Он просто бесконечно спамит персонажа.

EDIT :::: Теперь он отображается правильно.Я просто хочу знать, как напечатать «Введите число: $» на следующей строке.

Потому что это то, что происходит: введите символ: d Введите число: 4 дддд

Вот отредактированный код:

mov ah,9
lea dx,[100]    // Enter a character: $
int 21h
mov ah,1
int 21h
mov bl,al
mov ah,9
lea dx,[120]    // Enter a number: $
int 21h
mov ah,1
int 21h
sub al,30
mov cl,al
xor ch,ch
mov ah,2        // 150
mov dl,bl
int 21h
loop 150

Ответы [ 2 ]

0 голосов
/ 21 февраля 2019

Введите символ: d Введите число: 4 dddd

После решения исходных задач вы выразили дополнительнуюпроблема.

Я просто хочу знать, как напечатать «Введите число: $» на следующей строке.

Вы делаете это путем вывода возврата каретки (13) / перевод строки (10).

mov ah,9
lea dx,[100]    // Enter a character: $
int 21h
mov ah,1
int 21h
mov bl,al

mov dl, 13     ; Carriage return
mov ah, 02h
int 21h
mov dl, 10     ; Linefeed
mov ah, 02h
int 21h

mov ah,9
lea dx,[120]    // Enter a number: $
int 21h
...
0 голосов
/ 21 февраля 2019

Инструкция loop уменьшается CX, а вы внутри цикла увеличиваете CX.

Так что значение CX никогда не будетДостигните нуля и приведите к завершению инструкции loop.

Найти это было бы очень легко, если вы пошагово выполняли инструкцию кода по инструкции в отладчике, наблюдая за значением CX.

...