Глава 3. Kлавиатура.
Раздел 1. Управление клавиатурой.
3.1.4 Ожидание нажатия клавиши и эхо на экран.
При вводе данных и текста, эхо вводимых символов обычно выдается на экран. При этом такие символы как возврат каретки или забой переводятся в соответствующие перемещения курсора, а не изображаются как ASCII символы для этих кодов. Выдача эха происходит в той позиции, где предварительно был установлен курсор и текст автоматически переносится на следующую строку при достижении конца текущей. Перенос на следующую строку не требует специального кода, поскольку символы помещаются в следующую позицию буферной памяти дисплея, которая представляет из себя одну длинную строку, включающую все 25 строк дисплея.
Средний уровень.
Функция 1 прерывания 21H ожидает ввода символа, если буфер клавиатуры пуст, а затем выводит его на экран в текущую позицию курсора. Обрабатывается Ctrl-Break, поэтому может выполняться процедура обработки Ctrl-Break {3.2.8}. Введенный символ возвращается в AL. При вводе расширенного кода AL содержит ASCII 0. Для получения в AL второго байта расширенного кода надо повторить прерывание.
;---получение введенного символа | |
MOV AH,1 | ;номер функции |
INT 21H | ;ожидаем нажатия клавиши |
CMP AL,0 | ;расширенный код? |
JE EXTENDED_CODE | ;если да, то на спец. процедуру |
. | ;иначе символ находится в AL |
;---процедура обработки расширенных кодов | |
INT 21H | ;получаем в AL номер кода |
CMP AL,77 | ;проверка на "курсор-вправо" |
JNE C_R | ;если нет, проверка следующего |
JMP CURSOR_RIGHT | ;если да, то на процедуру |
C_R: CMP AL,75 | ;... и т.д. |
Эта функция полностью игнорирует клавишу <ESC>. Kлавиша табуляции интерпретируется нормально. Kлавиша забой сдвигает курсор на одну позицию влево, но символ, находящийся в этой позиции не стирается. Kлавиша <Enter> вызывает перемещение курсора в первую позицию текущей строки (нет автоматического перевода строки).
<~-3.1.3 Ожидать ввод символа и не выводить его на экран.
Содержание
3.1.5 Прием символа без ожидания.-~>