- •8. Прерывания и исключения
- •Прерывания и исключения защищенного режима
- •Приоритеты событий, вызывающих прерывания
- •Обработка прерываний в реальном режиме
- •Обработка прерываний в защищенном режиме
- •Возможности последовательной обработки исключений различных классов
- •Условия недостоверности сегмента tss
- •Приоритеты sse-исключений операций с плавающей точкой
- •Варианты обработки прерываний в режиме виртуального 8086
- •Виртуальные прерывания в режиме виртуального 8086
- •Обработка прерываний с использованием idt (защищенный режим)
- •Обработка прерываний с помощью таблицы векторов прерываний (реальный режим).
- •Обработка прерываний с использованием признаков vif и vip
Приоритеты событий, вызывающих прерывания
Приоритет |
Описание |
1 |
Аппаратный RESET и машинный контроль
|
2 |
Ловушка при переключении задач:
|
3 |
Внешние сигналы:
|
4 |
Ловушки на предыдущей инструкции:
|
5 |
Внешние сигналы прерывания:
|
6 |
Ошибки при выборке следующей инструкции:
|
7 |
Ошибки при декодировании следующей инструкции:
|
8 |
Ошибки при выполнении инструкции:
|
Отметим, что в этом приоритетном списке указан также ряд входных управляющих сигналов, назначение которых описано в разд. 9.5. При поступлении этих сигналов одновременно с другими событиями, вызывающими переход на обслуживание прерываний или исключений, процессор реагирует в соответствии с их приоритетами, приведенными в табл. $.2.
Обработка прерываний в реальном режиме
В реальном режиме для перехода к обслуживанию поступившего запроса прерывания или исключения процессор обращается к таблице векторов прерываний, которая должна располагаться в начальной области памяти, начиная с адреса 0...0h. Элементами таблицы являются вектора прерываний – 4-байтовые указатели входа в подпрограммы обслуживания различных типов прерываний, т.о. для обеспечения обслуживания всех 256 возможных видов прерываний, размер таблицы составляет 1024 байт. Формат вектора прерываний для реального режима показан на рис. $.1.
31 |
16 |
15 |
0 |
Селектор (CS) |
Смещение(IP) |
||
Рис. $.1. Формат вектора прерываний в реальном режиме
При возникновении прерывания процессор производит следующие действия:
Заносит текущее значение регистров CS и IP в стек.
Заносит текущее значение регистра FLAGS в стек.
Устанавливает значение признака IF=0 в регистре EFLAGS (запрещение прерываний).
Устанавливает значения признаков TF=RC=AC=0 в регистре EFLAGS.
Загружает в регистры CS, IP новое содержимое, заданное в выбранном векторе таблицы прерывании.
В реальном режиме процессор не заносит в стек код ошибки и использует только младшие 16 разрядные регистры IP и FLAGS (но не 32-разрядные EIP и EFLAGS). Возврат из подпрограммы обслуживания прерывания выполняется с помощью инструкции IRET, которая восстанавливает сохраненные в стеке содержимое регистров FLAGS, CS и IP. обеспечивая возвращение к выполнению прерванной программы.
