Защищенный режим процессоров Intel


Программа, которая работает с прерываниями - часть 2


Эти команды приводят к исключению. Вы можете попробовать их работу, удалив соответствующий символ комментария. При возникновении исключения на экран будет выведена диагностика, о чём позаботится обработчик исключений.

Перед завершением работы программа устанавливает реальный режим процессора и стирает экран.

Обработчик аппаратного прерывания клавиатуры - процедура с именем Keyb_int. После прихода прерывания она выдаёт короткий звуковой сигнал, считывает и анализирует скан-код клавиши, вызвавшей прерывание. Скан-коды классифицируются на обычные и расширенные (для 101-клавишной клавиатуры). В отличие от прерывания BIOS INT 16h, мы для простоты не стали реализовывать очередь, а ограничились записью полученного скан-кода в глобальную ячейку памяти key_code. Причём прерывания, возникающие при отпускании клавиш игнорируются.

Запись скан-кода в ячейку key_code выполняет процедура Keyb_PutQ. После записи эта процедура устанавливает признак того, что была нажата клавиша - записывает значение 0FFh в глобальную переменную key_flag.

Программное прерывание int 30h опрашивает состояние key_flag. Если этот флаг оказывается установленным, он сбрасывается, вслед за чем обработчик int 30h записывает в регистр AX скан-код нажатой клавиши, в регистр BX - состояние переключающих клавиш на момент нажатия клавиши, код которой передан в регистре AX.

Для того чтобы не загромождать программу второстепенными деталями, мы не стали перекодировать скан-код в код ASCII, вы сможете при необходимости сделать это сами.

Обработчик прерываний таймера - процедура с именем Timer_int. Эта процедура примерно раз в секунду выдаёт звуковой сигнал, чем её действия и ограничиваются.

Процедура rdump выводит на экран содержимое регистров процессора и может быть использована для отладки программы.

Обратите внимание на использованный способ возврата процессора в реальный режим:

DATASEG ; Пустой дескриптор для выполнения возврата ; процессора в реальный режим через перевод ; его в состояние отключения.


Начало  Назад  Вперед