Напишите полную программу в режиме реального адреса, которая: 1) предлагает пользователю прочитать с клавиатуры одну заглавную букву между K и P
Напишите полную программу в режиме реального адреса, которая:
- Предлагает пользователю прочитать с клавиатуры одну заглавную букву между K и P.
- Проверяет ввод, и если символ не находится в диапазоне, снова и снова запрашивает пользователя, пока не будет введен действительный символ.
- Отображает 5 соседних букв на каждой стороне.
Например, если пользователь вводит букву "М", то вывод будет: HIJKL M NOPQR. я пытаюсь решить, но мой ответ неверен
include irvine16.inc
.data
M1 byte "Enter one upper case letter between K and P : $"
letter byte 1,?,1
.code
main PROC
mov ax, @data
mov ds, ax
L1: mov ah,9 ;display msg m1
lea dx,M1
int 21h
mov ah,01h ;read a char
lea dx,letter
int 21h
mov bl,letter
CMP bl,'K'
Jb L1
CMP bl, 'P'
Ja L1
mov cx,5
lea si, letter
L3:
dec si
loop L3
mov cx,11
lea si, letter
L2: sub si,5
mov ah,05h
int 21h
LOOP L2
mov ah, 4ch
int 21h
main ENDP
END main
2 ответа
Это не так, как работает int 21h / function 01h. Персонаж возвращается в AL
:
mov ah,01h ;read a char
int 21h
cmp al,'K'
Этот код не имеет смысла:
mov cx,5
mov bl
L3:
dec si
loop L3
Это не будет собираться с mov bl
не является действительным istruction. Даже если это так, это не имеет смысла.
mov ah,05h
int 21h
Это не та функция, которую вы хотите. Для записи символа в стандартный вывод вы должны использовать функцию 02h с символом, помещенным в DL
,
Может быть, вам также следует рассмотреть возможность добавления ценных регистров до прерывания и их повторного использования. Я не совсем помню, как работают все функции 21h, но AFAIR некоторые могут повлиять, например, на регистр cx, что приведет к непредсказуемым циклам.