Это аппаратно генерируемое прерывание (IRQ 1) выполняется при каждом нажатии и отпускании клавиши. код ROM-BIOS интерпретирует это, сохраняя значения в буфере клавиатуры по адресу 0:041e. Он также обрабатывает специальные случаи клавиш PrtSc и SysReq, и отслеживает состояние клавиш Shift и различных Lock.
Резидентные popup-программы, которые обычно предусматривают "кнопку вызова", перехватывают INT 09H и проверяют на определенный ключ примерно так:
push ax
in al,60H ;читать ключ
cmp al,POP_KEY ;это кнопка вызова?
je do_pop ; да, активизировать popup
; нет, уйти на исходный обработчик
pop ax
jmp cs:[int9_vect] ;переход на первоначальный обработчик
do_pop: ;------следующий код необходим для отработки аппаратного прерывания
in al,61H ;взять значениe порта управления клавиатурой
mov ah,al ; сохранить его
or al,80h ;установить бит разрешения для клавиатуры
out 61H,al ; и вывести его в управляющий порт
xchg ah,al ;извлечь исходное значение порта
out 61H,al ; и записать его обратно
mov al,20H ;послать сигнал "конец прерывания"
out 20H,al ; контроллеру прерываний 8259
;------дальше - прочие проверки, и наконец - активизация popup
ps: и еще много тут
http://frolov-lib .ru/books/bsp/v02/ch2_3.htm (убрать пробел)
Клавиатура подключена к линии прерывания IRQ1. Этой линии соответствует прерывание INT 09h.
Клавиатурное прерывание обслуживается модулями BIOS. Драйверы клавиатуры и резидентные программы могут организовывать дополнительную обработку прерывания INT 09h. Для этого может быть использована цепочка обработчиков прерывания. В первой книге первого тома мы приводили примеры расширения обработчика прерывания INT 09h.
Как работает стандартный обработчик клавиатурного прерывания, входящий в состав BIOS?
Этот обработчик выполняет следующие действия:
читает из порта 60h скан-код нажатой клавиши;
записывает вычисленное по скан-коду значение ASCII-кода нажатой клавиши в специальный буфер клавиатуры, расположенный в области данных BIOS;
устанавливает в 1 бит 7 порта 61h, разрешая дальнейшую работу клавиатуры;
возвращает этот бит в исходное состояние;
записывает в порт 20h значение 20h для правильного завершения обработки аппаратного прерывания.
Обработчик прерывания INT 09h не просто записывает значение ASCII-кода в буфер клавиатуры. Дополнительно отслеживаются нажатия таких комбинаций клавиш, как Ctrl-Alt-Del, обрабатываются специальные клавиши PrtSc и SysReq. При вычислении кода ASCII нажатой клавиши учитывается состояние клавиш Shift и CapsLock.
Другие языки программирования и технологии
09h прерывание. Дайте пожалуйста описание функций 09h прерывания
Похожие вопросы
- Что такое юникод? Это, случайно, не хакерская программа? Что это? Дайте, пожалуйста, описания и ссылки.
- Где найти Описание функций из Winmm.dll? http://msdn.microsoft.com не открывается.
- Дайте пожалуйста ссылку на сайт где много уроков для начинающего фотошопера. Или школу по интернету по фотошопу.
- Напишите пожалуйста примеры функций выделения памяти и освобождения памяти (с аргументами) в С++ ?
- pascalabc.net все функцеи Напишите пожалуйста все функции Пример sqrt(x )
- Помогите пожалуйста написать функцию в VBA
- Дайте пожалуйста сылки на сайты для фриланс работы
- У меня украли телефон...=(((( Очень нужна помощь... Дайте ПОЖАЛУЙСТА программку как его можно найти по IMEI&&&
- Дайте, пожалуйста, инструкцию как rar форматировать в ISO и записать на диск.
- Где можно научится программированию?Если в книжках, дайте пожалуйста ссылку на них=) =)