Научная литература
booksshare.net -> Добавить материал -> Физика -> Александров Е.К. -> "Микропроцессорные системы" -> 110

Микропроцессорные системы - Александров Е.К.

Александров Е.К., Грушвицкий Р.И., Купрянов М.С., Мартынов О.Е. Микропроцессорные системы — Спб.: Политехника, 2002. — 935 c.
ISBN 5-7325-0516-4
Скачать (прямая ссылка): mikroprocessorniesistemi2002.djvu
Предыдущая << 1 .. 104 105 106 107 108 109 < 110 > 111 112 113 114 115 116 .. 528 >> Следующая

2.57.
При возникновении прерывания процессор производит следующие действия:
• заносит текущее значение регистров CS и IP в стек;
• заносит текущее значение регистра FLAGS в стек;
• устанавливает значение признака IF = 0 в регистре EFLAGS (запрещение
прерываний);
• устанавливает значения признаков TF = RC = АС = 0 в регистре EFLAGS;
• загружает в регистры CS, IP новое содержимое, заданное в выбранном
векторе таблицы прерываний.
31 16 15 0
Селектор (CS)
Смещение (IP)
Рис. 2.57. Формат вектора прерываний в реальном режиме
ПРОЦЕССОРЫ ОБЩЕГО НАЗНАЧЕНИЯ И СИСТЕМЫ НА ИХ ОСНОВЕ
Таблица 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
Базовый адрес ЮТ
Граница ЮТ
41 >
на
Рис. 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, Р6.
Передача управления через шлюз прерывания или шлюз ловушки может
сопровохщаться изменением уровня привилегий. Процессор проверяет значение
gDPL в дескрипторе шлюза при выполнении программных прерываний,
вызываемых командами INT п, INT3, INTO. Переход к выполнению подпрограммы
обслуживания в этих случаях производится, если уровень привилегий текущей
программы меньше или равен значению gDPL шлюза: CPL <= gDPL. Таким
образом, величина gDPL ограничивает уровень привилегий программ, которые
могут вызывать данную процедуру обслуживания. При выполнении других видов
прерываний и исключений процессор игнорирует gDPL шлюза.
Уровень привилегий сегмента команд, в котором размещается подпрограмма
Предыдущая << 1 .. 104 105 106 107 108 109 < 110 > 111 112 113 114 115 116 .. 528 >> Следующая

Реклама

c1c0fc952cf0704ad12d6af2ad3bf47e03017fed

Есть, чем поделиться? Отправьте
материал
нам
Авторские права © 2009 BooksShare.
Все права защищены.
Rambler's Top100

c1c0fc952cf0704ad12d6af2ad3bf47e03017fed