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