CodeNet / Языки программирования / Ассемблер / Прерывания DOS и BIOS
CodeNet / Платформы / Другие платформы / DOS / Прерывания DOS и BIOS
CodeNet / Платформы / Другие платформы / DOS / Прерывания DOS и BIOS
Функции BIOS - 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
