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

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

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

обслуживания, должен быть меньше или равен уровню привилегий текущей
программы: DPL <= CPL. Нарушение этого правила приводит к исключению типа
#GP. Поэтому рекомендуется под-
31
16 15 14 13 12
8 7 5 4
Смещение 31...16 | Р | DPL | 0D110 | ООО | Резерв. |
31 16 15 0
Селектор сегмента | Смещение 15-0 |
Шлюз прерывания
31 16 15 14 13 12 8 7 5 4 0
Смещение 31...16 | Р | DPL | 0D111 | ООО | Резерв. |
31 16 15 0
Селектор сегмента | Смещение 15-0 |
Шлюз ловушки
Рис. 2.59. Формат содержимого дескрипторов - шлюзов прерывения (а) и
ловушки (б)
ПРОЦЕССОРЫ ОБЩЕГО НАЗНАЧЕНИЯ И СИСТЕМЫ НА ИХ ОСНОВЕ
программы обслуживания прерываний и исключений располагать в сегментах с
уровнем привилегий DPL = 0, чтобы избежать ситуации, когда при
поступлении запроса прерывания или исключения уровень текущей программы
CPL окажется меньше, чем DPL сегмента команд обработчика прерывания.
При возникновении прерывания процессор сохраняет в стеке (рис. 2.60):
• содержимое регистра SS прерванной процедуры (если имеет место изменение
уровня привилегий);
• содержимое регистра ESP прерванной процедуры (если имеет место
изменение уровня привилегий);
• содержимое регистра EFLAGS;
• содержимое регистра CS;
• содержимое регистра EIP;
• код ошибки (если он формируется для данного исключения).
После сохранения в стеке содержимого регистра EFLAGS процессор
устанавливает в этом регистре значения признаков TF=VM=NT=0. Единственное
различие между использованием шлюза ловушки и шлюза прерывания состоит в
том, как процессор поступает с признаком IF. Если вызов подпрограммы
обслуживания производится через шлюз прерывания, то процессор после
сохранения в стеке содержимого регистра EFLAGS устанавливает значение
признака IF = 0, запрещая маскируемые прерывания. Если переход к
подпрограмме обслуживания осуществляется через шлюз ловушки, то значение
признака IF не изменяется.
Без изменения уровня привилегий
Общий стек
ESP до передачи управления обработчику прерывания
ESP поспе передачи управления обработчику прерывания
EFLAGS
CS
EIP
Код ошибки
С изменением уровня привилегий Стек прерванной Стек прерванной
процедуры процедуры
ESP до передачи управления SS
обработчику прерывания
ESP
EFLAGS
CS
ESP после передачи управле- EIP
ния обработчику прерывания Код ошибки
Рис. 2.60. Использование стека при прерываниях в защищенном режиме
РЕАЛИЗАЦИЯ ПРЕРЫВАНИЙ И ИСКЛЮЧЕНИЙ. ОБЕСПЕЧЕНИЕ ТЕСТИРОВАНИЯ И ОТЛАДКИ
31 16 15
Индекс селектора
TI
ЮТ
EXT
Jl)!
TV
Рис. 2.61. Формат кода ошибки
Возврат из подпрограммы обслуживания прерывания осуществляется с помощью
команды IRET. При восстановлении из стека содержимого регистра EFLAGS
действуют следующие правила:
• поле IOPL восстанавливается только если CPL = 0;
• флаг IF изменяется только если CPL J IOPL.
Формат дескриптора шлюза задачи при реализации прерываний и исключений
имеет вид, представленный на рис. 2.54. Когда прерывание обрабатывается
через шлюз задачи, то процессор выполняет обычную процедуру переключения
задач.
При реализации некоторых исключений (табл. 2.60) процессор заносит в стек
код ошибки, формат которого приведен на рис. 2.61.
Индекс селектора (биты 15-3) - указывает на дескриптор, использование
которого вызвало исключение. Биты IDT, TI указывают на таблицу, в которой
находится неверный дескриптор. Бит ЮТ = 1, если дескриптор находится в
таблице ЮТ. При значении бита ЮТ = 0 размещение дескриптора определяется
битом TI: если TI = 0, то дескриптор находится в таблице GDT, если TI = 1
- в таблице LDT. Бит EXT = 1, если исключение вызвано не выполняемой
программой, а внешним сигналом прерывания.
2.8.2. ПРИЧИНЫ ВОЗНИКНОВЕНИЯ ИСКЛЮЧЕНИЙ
В предыдущих главах рассмотрены основные случаи, при которых реализуются
различные виды исключений (табл. 2.60). Поэтому в данном разделе
ограничимся кратким обзором причин их возникновения.
Исключение 0 -деление на нуль (#DE). Возникает при выполнении команд DIV,
IDIV, если делитель равен нулю или если результат не может разместиться в
операнд-приемник (превышает разрядность приемника).
Исключение 1 - исключение для отладки (#DB). Возникает в пошаговом режиме
(при значении признака TF = 1 в регистре EFLAGS) после выполнения каждой
команды; при переключении на задачу, в сегменте TSS которой установлен
бит Т=1; при достижении аппаратных точек останова, устанавливаемых с
помощью регистров DR0-DR3. В зависимости от типа аппаратной точки
останова исключение #DB может обслуживаться как ошибка или как ловушка.
Прерывание 2 - немаскируемое прерывание. Возникает при поступлении
внешнего сигнала NMI=1 на вход NMI процессора или приеме соответствующего
сообщения по шине APIC. Это прерывание может быть вызвано как программное
с помощью команды INT п, где п = 2.
Исключение 3 - исключение программной точки останова (#ВР). Имеет место
при выполнении однобайтной команды INT3. Команда INT3 обычно вводится в
текст отлаживаемой программы для ее останова и контроля текущих
Предыдущая << 1 .. 105 106 107 108 109 110 < 111 > 112 113 114 115 116 117 .. 528 >> Следующая

Реклама

c1c0fc952cf0704ad12d6af2ad3bf47e03017fed

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

c1c0fc952cf0704ad12d6af2ad3bf47e03017fed