October 19 2017 17:25:27
Навигация
Авторизация
Логин

Пароль



Вы не зарегистрированы?
Нажмите здесь для регистрации .

Забыли пароль?
Запросите новый здесь.
Загрузка содержимого регистра
ФОРМАТЫ ПРЕДСТАВЛЕНИЯ ДАННЫХ И ВЫПОЛНЕНИЕ ОПЕРАЦИЙ

Таблица 2.61 Приоритеты событий, вызывающих прерывания

Приоритет Описание

1 (наивысший)
Аппаратный RESET и машинный контроль:
• внешний сигнал RESET#=0 (повторный запуск),
• отказ типа #МС (машинный контроль).
2 Ловушка при переключении задач:
• бит Т=1 в сегменте TSS.
3 Внешние сигналы:
• FLUSH#=0 (очистка кэш-памяти),
• STOPCLK#=0 (перевод в энергосберегающий режим),
• SMI#=0 (вход в системный режим),
• INIT=1 (инициализация процессора).
4 Ловушки на предыдущей команде:
• останов в контрольной точке,
• исключение отладки (признак TF=1 в регистре EFLAGS), точка останова при выборке данных из памяти или вводе-выводе.
5 Внешние сигналы прерывания:
• немаскируемое прерывание NMI-1,
• маскируемое прерывание INTR=1.
6 Ошибки при выборке следующей команды:
• точка останова при выборке команды,
• превышение границы сегмента команд,
• ошибка обращения к странице при выборке команды.
7 Ошибки при декодировании следующей команды:
• длина команды больше 15 байт,
• ошибка типа #UD (недействительный код операции),
• ошибка типа #NM (FPU недоступен).
8 Ошибки при выполнении команды:
• #MF (исключение FPU),
• #OF (переполнение),
• #BR (выход за границы массива),
• #TS (недействительный TSS),
• #NP (отсутствие сегмента),
• #SS (ошибка обращения к стеку),
• #GP (нарушение общей защиты),
• #PF (ошибка обращения к странице при выборке данных),
• #АС (ошибка выравнивания).

В реальном режиме процессор не заносит в стек кед ошибки и использует только младшие 16 разрядов регистра EIP (регистр IP) и EFLAGS (регистр FLAGS). Возврат из подпрограммы обслуживания прерывания выполняется с помощью команды IRET, которая восстанавливает сохраненное в стеке содержимое регистров FLAGS, CS и IP, обеспечивая возвращение к выполнению прерванной программы.

Обработка прерываний в защищенном режиме. Вызов подпрограмм обслуживания прерываний осуществляется через дескрипторную таблицу прерываний IDT (Interrupt Descriptor Table), которая может располагаться в любом месте адресного пространства. Базовый линейный адрес этой таблицы хранится в регистре IDTR (рис. 2.58).


47 16 15 0

Базовый адрес IDT Граница ЮТ

Рис. 2.58. Формат содержимого регистра IDTR

Загрузка содержимого регистра IDTR осуществляется с помощью команды LIDT, а его сохранение в памяти - с помощью команды SIDT. Команда LIDT является привилегированной и может выполняться только программой, имеющей высший уровень привилегий CPL = 0. Команда SIDT может быть выполнена при любом уровне привилегий программы.

Элементами таблицы ЮТ являются системные дескрипторы прерываний, имеющие размер по 8 байт. Поэтому максимальный размер таблицы ЮТ составляет 2 Кбайт при использовании всех 256 видов прерываний (исключений). В таблице могут содержаться три вида системных дескрипторов: шлюз прерывания, шлюз ловушки и шлюз задачи.

Форматы содержимого шлюзов прерывания и ловушки приведены на рис. 2.59, а, б. Они содержат селектор вызываемого при обслуживании сегмента, который поступает в регистр CS, и относительный адрес первой команды подпрограммы обслуживания, который загружается в регистр EIP. В дескрипторе также содержится бит Р, указывающий на присутствие (при значении Р = 1) в памяти сегмента, в котором находится соответствующая подпрограмма обслуживания, и двухбитовое поле gDPL, определяющее уровень привилегий шлюза. Бит D в байте доступа определяет режим работы процессора при обслуживании прерываний: если значение D = 0, то процессор функционирует как 16-разрядный процессор 80286, если D = 1, то обеспечивается 32-разрядный режим функционирования, характерный для процессоров 386,486, Pentium, P6.

Комментарии
Нет комментариев.
Добавить комментарий
Пожалуйста, залогиньтесь для добавления комментария.
Рейтинги
Рейтинг доступен только для пользователей.

Пожалуйста, авторизуйтесьили зарегистрируйтесь для голосования.

Нет данных для оценки.

Время загрузки: 0.03 секунд 2,256,152 уникальных посетителей