- •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. обеспечивая возвращение к выполнению прерванной программы.