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

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

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

результатов выполнения.
Исключение 4 - переполнение (#OF). Это исключение вызывается с помощью
команды INTO. Команда INTO проверяет признак OF в регистре EFLAGS и
реализует исключение #OF, если значение этого признака OF = 1.
Исключение 5 - превышение границы массива (#BR). Имеет место при
выполнении команды BOUND, если содержимое проверяемого регистра выходит
за указанные пределы.
ПРОЦЕССОРЫ ОБЩЕГО НАЗНАЧЕНИЯ И СИСТЕМЫ НА ИХ ОСНОВЕ
Исключение 6 - недействительный код операции (#UD). Возникает при попытке
выполнить команду, в коде которой обнаружено какое-либо из следующих
нарушений:
• указан неиспользуемый (резервированный) код операции;
• используется неправильный способ адресации операнда;
• указан код ММХ- или SSE-комацд при установленном в регистре CR0
значении бита ЕМ = 1;
• выбраны коды команд LLDT, SLDT, LTR, STR, LSL, ARPL, VERR, VERW при
работе процессора в реальном режиме или режиме виртуального 8086;
• префикс LOCK используется с командой, при выполнении которой не должен
производиться захват шины;
• выбран код команды UD2, которая служит для вызова подпрограммы
обслуживания данного исключения.
Исключение 7- процессор FPU недоступен (#NM). Реализуется в следующих
случаях:
• при попытке выполнить команду FPU, когда в регистре CR0 установлено
значение бита ЕМ = 1;
• при попытке выполнить FPU-, ММХ- или SSE-команду, когда в регистре CR0
установлено значение бита TS = 1;
• попытка выполнить команду WAIT или FWAIT, когда в регистре CR0
установлено значение битов МР = TS = 1.
Исключение 8 - двойная ошибка (#DF). Реализуется в случае, когда при
вызове подпрограммы обслуживания одного исключения выявляется другое.
Если процессор не может обработать такие исключения последовательно, то
генерируется исключение #DF. При этом в стек заносится код ошибки с
нулевым значением всех битов. Чтобы определить исключения, которые могут
обрабатываться последовательно, они разбиты на три класса: А, В и С (см.
табл. 2.60). В табл. 2.62 указано, какие классы исключений могут
обрабатываться последовательно, а какие вызовут исключение #DF. Если при
вызове исключения #DF обнаруживается другое исключение, то процессор
переходит в отключенное состояние (shutdown).
Исключение 10 - недействительный сегмент TSS (#TS). Это исключение может
иметь место при переключении задач. В табл. 2.63 указаны случаи, когда
сегмент TSS считается недостоверным. При вызове исключения #TS процессор
включает в стек код ошибки. Если в коде ошибки установлен бит EXT = 1, то
это означает, что переключение на неверную задачу произошло не
программным путем, а от внешнего прерывания через шлюз задачи. Исключение
#TS должно обрабатываться только через шлюз задачи!
Исключение 11 - отсутствие сегмента (#NP). Реализуется при обращении к
дескриптору, который имеет значение бита присутствия Р = 0. Такая
ситуация возникает в следующих случаях:
• попытка загрузить сегментные регистры CS, DS, ES, GS или FS селекторами
дескрипторов, у которых бит Р = 0 (загрузка регистра SS приводит к
исключению #SS); этот случаи может иметь место при переключении задач;
• попытка загрузить регистр LDTR с помощью команды LLDT селектором
дескриптора, у которого бит Р = 0;
• попытка загрузить регистр TR с помощь команды LTR селектором
дескриптора TSS, у которого бит Р = 0;
• попытка использовать дескриптор шлюза или дескриптор TSS, для которых
бит присутствия Р = 0.
Код ошибки содержит индекс селектора, приведшего к возникновению #NP.
Если в коде ошибки установлен бит EXT = 1, то это означает, что в
результате внешнего прерывания произошло обращение к отсутствующему
объекту (например, шлюз прерывания ссылается на отсутствующий сегмент).
Если в коде ошибки значение бита ЮТ = 1, то это означает, что индекс кода
ошибки ссылается на дескрипторную таблицу ЮТ (например, команда INT п
выбирает шлюз, у которого бит присутствия Р = 0).
РЕАЛИЗАЦИЯ ПРЕРЫВАНИЙ И ИСКЛЮЧЕНИЙ. ОБЕСПЕЧЕНИЕ ТЕСТИРОВАНИЯ И ОТЛАДКИ
Таблица 2.62
Возможности последовательной обработки исключений различных классов
Первое прерывание Второе прерывание
А В С
А Последовательно Последовательно Последовательно
В Последовательно #DF Последовательно
С Последовательно #DF #DF
Исключение 12 - ошибка при обращении к стеку (#SS). Возникает при
неправильном обращении к стеку, которое имеет место в следующих
ситуациях:
• нарушение границы сегмента стека, на который ссылается регистр SS;
команды, которые могут вызвать нарушение границы стека: POP, PUSH, CALL,
RET, IRET, ENTER и LEAVE, а также команды, у которых один из операндов
находится в сегменте стека (например, MOV СХ, [ВР+8] или MOV EDX,
SS:[EAX+6]);
• попытка загрузить сегментный регистр SS селектором дескриптора, у
которого бит присутствия Р = 0; это нарушение может возникнуть: при
переключении задач, при переходе с одного уровня привилегий на другой с
помощью команды CALL, при возврате с другого уровня привилегий, при
выполнении команды LSS, при загрузке регистра SS с помощью команд MOV или
Предыдущая << 1 .. 106 107 108 109 110 111 < 112 > 113 114 115 116 117 118 .. 528 >> Следующая

Реклама

c1c0fc952cf0704ad12d6af2ad3bf47e03017fed

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

c1c0fc952cf0704ad12d6af2ad3bf47e03017fed