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