Порядок проверки условий обслуживания прерываний
Способы указания номера вектора прерывания
Вектор прерывания
Вход в процедуру, обслуживающую аппаратное прерывание или исключение, определяется с помощью вектора прерывания, являющегося ___________ ________ _______________.
Вектора группируются в структуру – таблицу прерываний* (IDT, Interrupt Descriptor Table).
Каждому номеру (0-255) прерывания или исключения соответствует свой вектор.
Вектора 0-31 в таблице прерываний Intel резервирует под _______________.
Таблица прерываний в реальном режиме
Содержит ___________ _________ (двойные слова) обслуживающих процедур.
После сброса располагается, начиная с нулевых адресов.
Команда LIDT дает возможность:
– ____________ ______________ таблицы в пределах первого мегабайта;
– ____________ _________ в пределах от 007Fh до 03FFh.
При попытке обслуживания прерывания с номером, выходящим за размер таблицы, генерируется исключение #DF.
Таблица прерываний в защищенном режиме
Содержит 8-байтные _________________ прерываний.
Размер: _______ элементов (дескрипторов).
Может располагаться в любом месте физической памяти.
Зависят от вида прерывания:
– маскируемых аппаратных прерываний – вводится от внешнего контроллера прерываний во втором ________ ________ или поступает по ______ ______;
– программных прерываний – задается командой;
– немаскируемого прерывания – имеет фиксированный вектор (2);
– _______________ – автоматически генерируется внутри процессора.
1.Ловушка ___________ (#DB) по выполненной инструкции (пошаговый режим через флаг TF или точка останова по данным через регистры отладки).
2.Отказ ___________ (#DB) по очередной инструкции (точка останова по инструкции через регистр отладки).
3.Немаскируемое аппаратное прерывание.
4.Маскируемое аппаратное прерывание (при IF=1).
5.Отказ _________________ (#NP или #GP) при выборке очередной инструкции.
6.Отказ ____________ (#PF) при выборке очередной инструкции.
7.Отказ ____________________ очередной инструкции (#UD или #GP).
8.Для операции ______ исключение #NM (если TS=1 и МР=1).
9.Для инструкции _____ исключение #NM (если ЕМ=1 или TS=1).
10.Для операции WAIT или инструкции FPU исключение #MF от FPU.
11.Отказ _________________ (#NP, #SS, #GP) или отказ страницы (#PF) для операндов, используемых в инструкции.
Двойной отказ
Double Fault (#DF).
Возникает, если:
– при обработке исключения, связанного с __________________ (#TS, #NP, #SS или #GP), процессор обнаруживает исключение, отличное от _________ ____________ (#PF);
– при обработке исключения отказа страницы #PF обнаруживается исключение другого типа.
Аварийный останов
Shutdown.
Происходит, если во время обслуживания исключения отказа страницы произойдет _____ ______ ________ страницы.
Никакие новые инструкции не выполняются.
Из этого состояния процессор можно вывести только аппаратно:
– сигналом _____, оставляя его в защищенном режиме;
– сигналом ________, переводящим процессор в реальный режим.
При обработке исключений 8-14, 17 и 18 в защищенном режиме процессор сохраняет в стеке ________ ______ _________ (Error Code). Если оно отлично от нуля, то в его битах [15:3] содержится селектор дескриптора, с которым связана ошибка, или описание ___________ _________ (для исключения 14 #PF).
Таблица прерываний микропроцессоров x86
| Номер | Функция | Мне-моника | Тип | 
| 00h | Переполнение при делении на 0 | #DE | __ | 
| 01h | Исключение отладки | #DB | _____ | 
| 02h | Немаскируемое прерывание (NMI) | - | I | 
| 03h | Исключение отладки (INT 3) | #ВР | __ | 
| 04h | Исключение по переполнению (INTO) | #OF | __ | 
| 05h | Прерывание по контролю диапазона (BOUND) | #BR | __ | 
| 06h | Недопустимый код операции | #UD | __ | 
| 07h | Сопроцессор недоступен или переключалась задача | #NM | __ | 
| 08h | Двойной отказ 1) | #DF | ___ ______ | 
| 09h | Нарушение границы сегмента сопроцессором (386/387) | __, EC | |
| 0Ah | Недопустимый сегмент состояния задачи 2) | #TS | __, EC | 
| 0Bh | Сегмент отсутствует 2) | #NP | __, EC | 
| 0Ch | Нарушение границы сегмента стека или сегмент стека отсутствует 3) | #SS | __, EC | 
| 0Dh | Общее нарушение защиты 4) | #GP | __, EC | 
| 0Eh | Отказ страницы 2) | #PF | ___ ___ | 
| 0Fh | Зарезервировано | - | - | 
| 10h | Исключение сопроцессора | #MF | __ | 
| 11h | Контроль выравнивания (486+) 2) | #AC | ___ ______ | 
| 12h | Машинный контроль (Р5+) 2) | #MC | __, EC | 
| 13h | Исключение блока ХММ (Рentium III+) | #XF | __ | 
| 14h-1fh | Зарезервировано | - | - | 
| 00h-FFh | Аппаратные (маскируемые) и программные прерывания INT n | - | __ | 
Набор и обработка исключений реального и защищенного режимов различны. В реальном режиме:
1) вектор прерывания не попадает в таблицу;
2) не возникают; возможны в режиме V86;
3) нарушение границы сегмента стека;
4) нарушение границы сегмента данных или кода.
Таблица прерываний IBM PC
Часть из 32 зарезервированных Intel исключений перекрывается системными прерываниями BIOS и DOS.
| Номер | Функция | 
| 05h | Печать копии экрана. Генерируется при нажатии клавиши PrtScr | 
| 08h | IRQ0 – от интервального таймера, возникает 18,2 раза в секунду | 
| 09h | IRQ1 – от клавиатуры | 
| 0Ah | IRQ2 – каскадирование контроллеров прерываний | 
| 0Bh | IRQ3 – от асинхронного порта COM2 | 
| 0Сh | IRQ4 – от асинхронного порта СОМ1 | 
| 0Dh | IRQ5 – от контроллера HDD (в ХТ) или зарезервировано (PC/АТ) | 
| 0Eh | IRQ6 – от контроллера FDD после завершения операции чтения/записи | 
| 0Fh | IRQ7 – от принтера (готовность к выполнению очередной операции) | 
| 10h | Обслуживание видеоадаптера | 
| 11h | Определение конфигурации устройств в системе | 
| 12h | Определение размера оперативной памяти в системе | 
| 13h | Обслуживание дисковой системы | 
| 14h | Последовательный ввод/вывод | 
| 15h | Расширенный сервис для компьютеров АТ | 
| 16h | Обслуживание клавиатуры | 
| 17h | Обслуживание принтера | 
| 1Ah | Обслуживание часов | 
| 1Bh | Обработчик прерываний Ctrl-Break | 
| 1Ch | Вызывается программно обработчиком прерываний таймера (18,2 раза в секунду) | 
| 70h | IRQ8 – от часов реального времени | 
| 71h | IRQ9 – от контроллера EGA | 
| 72h | IRQ10 – зарезервировано | 
| 73h | IRQ11 – зарезервировано | 
| 74h | IRQ12 – зарезервировано | 
| 75h | IRQ13 – от математического сопроцессора | 
| 76h | IRQ14 – от контроллера HDD | 
| 77h | IRQ15 – зарезервировано |