Сам обработчик прерываний
• intHandler proc far
Загрузка обработчика прерывания
• loadInt proc near
Выгрузка обработчика, восстановление предыдущего обработчика и освобождение занятой обработчиком памяти:
• unloadInt proc near
Сравнение текущего обработчика с устанавливаемым:
• compareInt proc near
Сборка
Загрузочный модуль собирается из файла int.asm с помощью утилит
“masm”, “link” и “exe2bin”, для автоматизации сборки написан скрипт build.bat.
1. Резидентный обработчик прерываний
Пример работы обработчика прерывания клавиатуры показан на рисунке
1, список блоков памяти – на рисунке 2.
Рисунок 1: работа обработчика
6
Рисунок 2: список блоков MCB
Как можно заметить, счётчик обновляется при нажатии нужной клавиши.
В списке блоков видно, что программа с обработчиком всё ещё находится в памяти в блоке №6 по адресу 0544h (блоком выше, по адресу 050Eh находится копия среды, переданная программе).
2. Определение установленного обработчика
Если попробовать запустить программу с ещё активным обработчиком, об этом будет выведено оповещение (рис. 3)
7
Рисунок 3: обработчик установлен
3. Выгрузка обработчика
При запуске программы с ключом ‘/un’ активный обработчик будет выгружен (рис. 4), и обработка нажатий клавиш прекратится, при этом если обработчик не активен, будет выдано соответствующее оповещение (рис. 4).
Рисунок 4: выгрузка обработчика
При этом память занимаемая обработчиком и его копией среды будет освобождена, что видно на рисунке 5.
8
Рисунок 5: MCB список после выгрузки обработчика
Выводы:
В ходе лабораторной работы были исследованы инструменты построения пользовательских обработчиков прерываний и их сопряжение со стандартными,
написан и отлажен программный модуль с функциями загрузки и выгрузки резидентного обработчика, обрабатывающего нажатия клавиш клавиатуры,
который в свою очередь может вызывает стандартный обработчик данного прерывания.
9
Контрольные вопросы
1) Какого типа прерывания использовались в работе?
- только программные:
09h – прерывания нажатия клавиатуры
10h – прерывание видео-сервиса BIOS
16h – прерывание сервиса клавиатуры BIOS
21h – прерывание ядра DOS.
2) Чем отличается скан код от кода ASCII?
- скан-код – уникальный код клавиши клавиатуры, который напрямую подаётся в порт 60h для чтения.
ASCII же является кодовой таблицей символов.
Множества скан-кодов и ASCII символов пересекаются (например буквы и цифры) но не равны, так как есть символы/клавиши присутствующие только в одном множестве, но не в другом.
10