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



       

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


Ниже приведены команды, иллюстрирующие использование функции ввода с клавиатуры в расширенной версии DOS:

INAREA DB 20 DUP (' ') ;Область ввода MOV AH,3FH ;Запрос на ввод MOV BX,00 ;Номер для клавиатуры MOV CX,20 ;Максимум байт для ввода LEA DX,INAREA ;Адрес области ввода INT 21H ;Вызов DOS

Команда LEA загружает относительный адрес INAREA в регистр DX. Команда INT ожидает, пока пользователь не введет cимволы с клавиатуры, но не проверяет превышает ли число введенных символов максимальное значение в регистре CX (20 в приведенном примере). Нажатие клавиши Return (код шест. 0D) указывает на завершение ввода. Например, после ввода текста "PC Users Group" INAREA будет содержать:

PC Users Group, шест.0D, шест.0A

После введенного текста непосредственно следует символ воз врата коретки (шест. 0D), который был введен, и символ конца строки (шест. 0A), который не был введен. В силу данной особенности максимальное число символов и размер области ввода должны предусматpивать место для двух символов. Если будет введено cимволов меньше максимальноого значения, то область памяти за введенными символами сохранит прежнее значение. В результате успешной операции будет очищен флаг CF (что можно проверить) и в регистре AX будет установлено число байт, введенных с клавиатуры. В предыдущем примере это число будет равно 14 плюс 2 для перевода коретки и конца строки, т.е.16. Соответствующим образом программа может определить действительное число введенных символов. Хотя данное свой ство весьма тривиально для ответов типа YES или NO, оно может быть полезно для ответов с пеpеменной длиной, таких, например, как имена. Ошибка ввода может возникнуть, если определен неправиль ный номер файла. В этом случае будет установлен флаг CF и в регистр AX будет помещен код ошибки (6 в данном случае). Так как регистр AX может содержать или длину введенных данных, или код ошибки, то единственный способ определения наличия ошибки - проверка флага CF. Если вводить текст, который превышает максимальную длину, yстановленную в регистре CX, то будут приниматься все символы. Рассмотрим ситуацию, когда регистр CX содержит 08,а пользователь введет символы "PC Exchange". В результате первые восемь символов "PC Excha" попадут в область ввода без кодов возврата каретки и конца строки. В регистре AX будет установлена длина 08. Следующая команда INT будет принимать данные не с клавиатуры, а из собственного буфера, поскольку там еще остались предыдущие данные. Таким образом,




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