Низкоуровневое програмирование Главная - Реальный режим - Прерывания Bios - INT 09h: прерывание от клавиатуры.

INT 09h: прерывание от клавиатуры.


Это аппаратно генерируемое прерывание (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