Программные (синхронные) прерывания, команды прерывания МП. Сервисы BIOS, как программные прерывания.
Прерывание (англ. interrupt) — сигнал, сообщающий процессору о наступлении какого-либо события. При этом выполнение текущей последовательности команд приостанавливается и управление передаётся обработчику прерывания, который реагирует на событие и обслуживает его, после чего возвращает управление в прерванный код.
синхронные или внутренние — события в самом процессоре как результат нарушения каких-то условий при исполнении машинного кода: деление на ноль или переполнение, обращение к недопустимым адресам или недопустимый код операции
Каждый обработчик прерываний BIOS и DOS может выполнять несколько различных функций. В команде INT никак не определяется, какую именно функцию должен выполнить обработчик прерываний. Поэтому перед обращением к команде INT в регистры микропроцессора должна быть занесена информация, определяющая, какую функцию необходимо выполнить.
Например, по команде INT 13h могут быть выполнены следующие функции:
00h - сброс дисковой системы;
0lh - определение состояния дисковой системы (успешное завершение, некорректная команда, не найдена адресная метка и т.д.);
02h - чтение секторов в основную память;
03h - запись секторов из основной памяти;
04h - контроль секторов (есть ошибка - нет ошибки);
05h- форматирование дорожки;
06h - для жесткого диска - форматирование дорожки с установкой флагов плохих секторов;
07h - для жесткого диска - форматирование диска, начиная с указанной дорожки;
|
|
08h - определение типа и текущих параметров диска...
и т.д.
Нужно иметь в виду, что одни и те же номера функций могут обозначать разные операции для различных устройств; некоторые функции отсутствуют в ранних версиях операционной системы, а некоторые — претерпели изменения в последующих версиях.
При выполнении команды INT номер функции должен содержаться в регистре АН микропроцессора. Остальные регистры должны включать необходимые для этой функции параметры. Например, для функции 02h остальные регистры микропроцессора должны содержать:
AL - число читаемых секторов;
СН - номер дорожки, на которой расположены читаемые сектора;
CL - номер сектора;
DH - номер головки;
DL - номер дисковода;
ES:BX - адрес буфера для чтения.
В результате выполнения этой функции при возникновении ошибки флаг CF устанавливается в 1; в регистр AL заносится число считанных секторов, в регистр АН записывается код состояния, сформированный после окончания операции:
00 - успешное завершение;
01 - некорректная команда;
02 - адресная метка не найдена;
FF - сбой операции опроса (для жесткого диска).
Кроме команд INT и IRET в IBM PC, с прерываниями работают команды CLI (запрещение маскируемых прерываний) и STI (отмена запрета прерывания).
|
|
Сервисы и прерывания BIOS
Внутренние прерывания:
♦ Int 00h — деление на 0;
♦ Int 01h — пошаговый режим;
♦ Int 03h — точка останова;
♦ Int 04h — переполнение;
♦ Int 06h — недопустимая команда 286+;
♦ Int 07h — вызов отсутствующего NPU.
Аппаратные прерывания:
♦ Int 02h — немаскируемое прерывание;
♦ Int 08h - таймер 8253/8254;
♦ Int 09h — клавиатура;
♦ Int 0Ah - IRQ2/9;
♦ Int 0Bh- IRQ3;
♦ Int 0Ch-IRQ4;
♦ Int 0Dh — IRQ5;
♦ Int 0Eh — IRQ6 — контроллер гибких дисков;
♦ Int 0Fh-IRQ7;
♦ Int 70h - CMOS-таймер;
♦ Int 7Ih — IRQ9 (перенаправлено на Int 0Ah);
♦ Int 72h- IRQ10;
♦ Int 73h — IRQ11;
♦ Int 74h — IRQ 12 (контроллер мыши PS/2);
♦ Int 75h — IRQ 13 — исключение сопроцессора;
♦ Int 76h — IRQ14— контроллер жестких дисков;
♦ Int 77h-IRQ15.
ПРИМЕЧАНИЕ
Прерывания Int 70h-77h имеют место только в AT.
Функции ROM BIOS (16-битные сервисы):
♦ Int 05h (FOOO:FF54h) - печать экрана;
♦ Int 10h — видеосервис;
♦ Int llh — чтение списка оборудования (слово из BDA 0040:001 0h), возвращает в АХ:
• биты 15:14 — число обнаруженных LPT-портов: 00 —0,... 11 — 3;
• бит 13 — резерв;
• бит 12 — обнаружен игровой адаптер;
482 Глава 12. Архитектурные компоненты IBM PC-совместимого компьютера
• биты 11:9 — число обнаруженных СОМ-портов: 000 —0,... 111 — 7;
|
|
• бит 8 — наличие контроллера DMA;
• биты 7:6 — число обнаруженных НГМД: 00 — 1,... 11 — 4;
• биты 5:4 — активный видеорежим: 00 — резерв, 10 — 80-колоночный цветной, 01 — 40-колоночный цветной, 11 — монохромный;
• биты 3:2 — размер ОЗУ на системной плате (теперь обычно 00);
• бит 1 — присутствие математического сопроцессора;
• бит 0 — присутствие дисководов;
♦ Int 12h — размер непрерывной памяти;
♦ Int 13h — дисковый сервис (блочный ввод-вывод);
♦ Int 14h — обслуживание СОМ-портов;
♦ Int 15h — АТ-функции (системный сервис, функции определяются значени
ем АН/АХ):
• 00-ОЗЬ — управление и обмен данными с кассетным магнитофоном (были когда-то и такие «стриммеры»!) на старых PC;
• 4fh — перехват клавиатуры;
• 53xxh — сервисы управления потреблением АРМ (Advanced Power Management);
• 8300h — запуск таймера, устанавливающего флаг в заданной ячейке;
• 830 lh — сброс того же таймера;
• 84h — джойстик (см. п. 8.6);
• 86h — программируемая задержка;
• 87h — перемещение блока расширенной памяти;
• 88h — получение размера расширенной памяти;
• 89h — переключение в режим V86;
• COh — получение системной конфигурации, при успешном выполнении (CF=0, AH=0) ES:BX указывает на таблицу данных конфигурации;
• 80-82h, 85h, 90h, 91h — функции многозадачных ОС (BIOS устанавливает
|
|
заглушки);
♦ Int 16h — клавиатурный ввод-вывод;
♦ Int 17h — обслуживание LPT-портов;
♦ Int 18h — процедура восстановления при неудаче начальной загрузки (прежде - ROM-Basic);
♦ Int 19h — начальная загрузка (вызов процедуры Bootstrap);
♦ Int lAh— системное время, дата, будильник и 16-битные вызовы сервисов PCI;
♦ Int IBh — обработчик нажатия клавиш Ctrl+Break;
12.8. Сервисы и прерывания BIOS 483
♦ Int I C h — User Timer Interrupt, процедура, вызываемая обработчиком I n t 0 8 h каждые 55 мс; BIOS устанавливает простую заглушку (IRET), но программы могут перехватывать это прерывание; на время отработки этой процедуры все аппаратные прерывания запрещены (кроме NMI).
♦ Int ЗЗп — поддержка мыши;
♦ Int 4Ah — обработчик будильника пользователя, установленного функцией
BIOS Int lAh(6); прерывание вызывается асинхронно, так что при возврате
из процедуры все регистры и флаги должны быть в том же состоянии, что и при
входе; BIOS ставит заглушку (IRET);
♦ Int 67h - EMS-функции.
Указатели на таблицы:
♦ Int IDh — видеопараметры;
♦ Int lEh — параметры дискет;
♦ Int IFh — знакогенератор СGA;
♦ Int 41h — параметры HDD 0;
♦ Int 46h — параметры HDD
Дата добавления: 2020-01-07; просмотров: 205; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!