При инициализации таблицы прерываний BIOS отвечает за корректное заполнение части векторов, имеющих отношение к аппаратным средствам компьютера и сервисам BIOS. На некоторые из них могут быть просто установлены заглушки: вектор ссылается на код обработчика, содержащего единственную инструкцию возврата из прерывания — IRET. BIOS инициализирует векторы прерываний различных назначений:
♦ внутренних прерываний процессора (исключений), которые могут возник нуть в реальном режиме работы (об исключениях защищенного режима в основном заботится соответствующая операционная система);
♦ аппаратных прерываний, маскируемых и немаскируемых;
♦ вызовов функций ROM BIOS (16-битных сервисов);
♦ указателей на системные таблицы. Внутренние прерывания:
♦ Int OOh — деление на 0;
♦ Int Olh — пошаговый режим;
♦ Int 03h — точка останова;
♦ Int 04h — переполнение;
♦ Int 06h — недопустимая команда 286+;
♦________________________________ Int 07h — вызов отсутствующего математического сопроцессора (Numeric Pro cessor Unit, NPU).
Аппаратные прерывания:
♦ Int 02h — немаскируемое прерывание;
♦ Int 08h - таймер 8253/8254;
♦ Int 09h — клавиатура;
♦ Int OAh - IRQ2/9;
♦ Int OBh - IRQ3;
♦ Int OCh - IRQ4;
♦ Int ODh - IRQ5;
♦ Int OEh — IRQ6 (контроллер гибких дисков);
♦ Int OFh - IRQ7;
♦ Int 70h - CMOS-таймер;
♦ Int 71h — IRQ9 (перенаправлено на Int OAh);
♦ Int 72h - IRQ10;
♦ Int 73h - IRQ11;
♦ Int 74h — IRQ12 (контроллер мыши PS/2);
♦ Int 75h — IRQ13 (исключение сопроцессора);
♦ Int 76h — IRQ14 (контроллер жестких дисков);
♦ Int 77h - IRQ15.
ПРИМЕЧАНИЕ
Прерывания Int 70h-77h имеют место только в AT.
Функции ROM BIOS (16-битные сервисы):
♦ Int 05h (F000:FF54h) - печать экрана;
♦ Int 10h — видеосервис (см. 10.6);
♦ Int llh — чтение списка оборудования (слово из BDA 0040:001 Oh), возвра щает в АХ:
♦ Int 13h — дисковый сервис (блочный ввод-вывод, см. 9.11);
♦ Int 14h — обслуживание СОМ-портов (см. 16.1);
♦ Int 15h — АТ-функции (системный сервис, функции определяются значени ем АН/АХ):
• 00-03h — управление и обмен данными с кассетным магнитофоном (были когда-то и такие «стримеры»!) на старых ПК;
• 4fh — перехват событий клавиатуры (см. 11.1);
• 53xxh — сервисы расширенного управления энергопотреблением (АРМ);
• 8300h — запуск таймера, устанавливающего флаг в заданной ячейке (см. 4.6);
• 830 lh — сброс того же таймера;
• 84h — джойстик (см. 11.6);
• 86h — программируемая задержка (см. 4.6);
• 87h — перемещение блока расширенной памяти;
• 88h — получение размера расширенной памяти;
• 89h — переключение в режим V86;
• COh — получение системной конфигурации, при успешном выполне нии (CF e 0, АН = 0) ES:BX указывает на таблицу данных конфигурации (табл. 5.3);
• 80-82h, 85h, 90h, 91h — функции многозадачных ОС (BIOS устанавлива ет заглушки);
♦ Int 16h — клавиатурный ввод-вывод (см. 11.1);
♦ Int 17h — обслуживание LPT-портов (см. 15.4);
♦ Int 18h — процедура восстановления при неудаче начальной загрузки (преж де - ROM-Basic);
♦ Int 19h — начальная загрузка;
♦ Int lAh — системное время, дата, будильник (см. 4.6) и 16-битные вызовы сервисов PCI (см. 14.7);
♦ Int lBh — обработчик нажатия клавиш Ctrl+Break;
♦ Int ICh — процедура User Timer Interrupt, вызываемая обработчиком Int 08h каждые 55 мс; BIOS устанавливает простую заглушку (IRET), но программы могут перехватывать это прерывание; на время отработки процедуры все ап паратные прерывания запрещены (кроме NMI);
♦ Int 33h — поддержка мыши;
♦ Int 4Ah — обработчик будильника пользователя, установленного функцией Int lAh (6) BIOS (см. 4.6); прерывание вызывается асинхронно, так что при возврате из процедуры все регистры и флаги должны быть в том же состоя нии, что и при входе; BIOS ставит заглушку (IRET);
Int 67h — EMS-функции.
Указатели на таблицы:
♦ Int lDh — видеопараметры;
♦ Int lEh — параметры дискет;
♦ Int lFh — знакогенератор CGA;
♦ Int 41h — параметры HDD 0;
♦ Int 46h — параметры HDD 1;
♦ Int 43h — знакогенератор EGA.
Как видно из приведенных списков, большинство векторов BIOS накладывается на область векторов ОО-lFh, зарезервированную фирмой Intel под внутренние прерывания и исключения процессоров. Во времена 8086 из них использовалось совсем малое количество, зарезервированной была объявлена вся указанная область. Тем не менее творцы IBM PC «влезли» в эту область, что осложнило жизнь системных программистов, работающих с более щедрыми на исключения современными процессорами.