Ассемблер и программирование для IBM PC



       

ГЛАВА 8. Экранные операции I: Основные свойства - часть 6


NAMEPAR LABEL BYTE ;Список параметров:

Ассемблер для IBM PC. Глава 8 177

MAXLEN DB 20 ; Максимальная длина ACTLEN DB ? ; Реальная длина NAMEFLD DB 20 DUP (' ') ; Введенные символы

Так как в списке параметров директива LABEL не занимает места, то NAMEPAR и MAXLEN указывают на один и тот же aдрес памяти. В трансляторе MASM для определения списка параметров в виде структуры может использоваться также директива STRUC. Однако, в связи с тем, что ссылки на имена, определенные внутри, требуют специальной адресации, воздержимся cейчас от рассмотрения данной темы до главы 24 "Директивы ассемблера". Для запроса на ввод необходимо поместить в регистр AH номер функции - 10 (шест. 0AH), загрузить адрес списка пара метров (NAMEPAR в нашем примере) в регистр DX и выполнить INT 21H:

MOV AH,0AH ;Запрос функции ввода LEA DX,NAMEPAR ;Загрузить адреса списка параметров INT 21H ;Вызвать DOS

Команда INT ожидает пока пользователь не введет с клавиа туры текст, проверяя при этом, чтобы число введенных cимво лов не превышало максимального значения, указанного в списке параметров (20 в нашем примере). Для указания конца ввода пользователь нажимает клавишу Return. Код этой клавиши (шест. 0D) также заносится в поле ввода (NAMEFLD в нашем примере). Если, например, пользователь ввел имя BROWN (Return), то cписок параметров будет содержать информацию:

дес.: |20| 5| В| R| O| W| N| #| | | | | ... шест.: |14|05|42|52|4F|57|4E|0D|20|20|20|20| ...

Во второй байт списка параметров (ACTLEN в нашем примере) команда заносит длину введенного имени - 05. Код Return находится по адресу NAMEFLD +5. Символ # использован здесь для индикации конца данных, так как шест. 0D не имеет отображаемого символа. Поскольку максимальная длина в 20 символов включает шест.0D, то действительная длина вводимого текста может быть только 19 символов.

ПРОГРАММА: ВВОД И ВЫВОД ИМЕН ------------------------------------------------------------

EXE-программа, приведенная на рис. 8.2, запрашивает ввод имени, затем отображает в середине экрана введенное имя и включает звуковой сигнал. Программа продолжает запрашивать и отображать имена, пока пользователь не нажмет Return в ответ на очередной запрос. Рассмотрим ситуацию, когда пользователь ввел имя TED SMITH:




Содержание  Назад  Вперед