Напишите полную программу в режиме реального адреса, которая: 1) предлагает пользователю прочитать с клавиатуры одну заглавную букву между K и P

Напишите полную программу в режиме реального адреса, которая:

  1. Предлагает пользователю прочитать с клавиатуры одну заглавную букву между K и P.
  2. Проверяет ввод, и если символ не находится в диапазоне, снова и снова запрашивает пользователя, пока не будет введен действительный символ.
  3. Отображает 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, что приведет к непредсказуемым циклам.

Другие вопросы по тегам