Глава 3. Kлавиатура.
Раздел 1. Управление клавиатурой.
3.1.7 Проверка/установка статуса клавиш-переключателей.
Два байта, расположенные в ячейках памяти 0040:0017 и 0040:0018 содержат биты, отражающие статус клавиши сдвига и других клавиш-переключателей следующим образом:
Бит Kлавиша Значение, когда бит = 1 0040:0017 7 Insert режим вставки включен 6 CapsLock режим CapsLock включен 5 NumLock режим NumLock включен 4 ScrollLock режим ScrollLock включен 3 Alt клавиша нажата 2 Ctrl клавиша нажата 1 левый Shift клавиша нажата 0 правый Shift клавиша нажата 0040:0018 7 Insert клавиша нажата 6 CapsLock клавиша нажата 5 NumLock клавиша нажата 4 ScrollLock клавиша нажата 3 Ctrl-NumLock режим Ctrl-NumLock включеностальные биты не используются
Прерывание клавиатуры немедленно обновляет эти биты статуса, как только будет нажата одна из клавиш-переключателей, даже если не было считано ни одного символа из буфера клавиатуры. Это верно и для клавиши Ins, которая единственная из этих 8 клавиш помещает код в буфер (установка статуса Ins меняется даже если в буфере нет места для символа). Отметим, что бит 3 по адресу 0040:0018 устанавливается в 1, когда действует режим задержки Ctrl-NumLock; поскольку в этом состоянии программа приостановлена, то этот бит несущественен.
Прерывание клавиатуры проверяет состояние статусных битов перед тем, как интерпретировать нажатые клавиши, поэтому когда программа меняет один из этих битов, то эффект такой же, как при физическом нажатии соответствующей клавиши. Вы можете захотеть установить состояние клавиш NumLock и CapsLock, чтобы быть уверенным, что ввод будет требуемого вида. Hаоборот, Ваша программа может нуждаться в чтении статуса этих клавиш, например для того, чтобы вывести текущий статус на экран. Отметим, что клавиатура AT правильно устанавливает световые индикаторы состояния клавиш, даже если переключены программно.
Средний уровень.
Функция 2 прерывания 16H предоставляет доступ к одному - но только одному - из байтов статуса. Это байт по адресу 0040:0017, который содержит больше полезной информации. Байт возвращается в AL.
;---проверка статуса клавиши вставки | |
MOV AH,2 | ;номер функции |
INT 16H | ;получаем байт статуса |
TEST AL,10000000B | ;проверяем бит 7 |
JZ INSERT_OFF | ;если 0, то INSERT выключен |
Hизкий уровень.
В данном примере устанавливается режим вставки, за счет установки бита 7 байта статуса по адресу 0040:0017 (который адресуется как 0000:0417).
SUB AX,AX | ;устанавливаем добавочный сегмент на |
MOV ES,AX | ;начало памяти |
MOV AL,10000000B | ;готовим бит 7 к установке |
OR ES:[417H],AL | ;меняем байт статуса |
<~-3.1.6 Получение строки символов.
Содержание
3.1.8 Hаписание процедуры ввода с клавиатуры общего назначения.-~>