December 12 2017 08:06:19
Навигация
Авторизация
Логин

Пароль



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

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

Исключение 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 процессор включает в стек код ошибки. Если в коде ошибки установлен бит ЕХТ = 1, то это означает, что переключение на неверную задачу произошло не программным путем, а от внешнего прерывания через шлюз задачи. Исключение #TS должно обрабатываться только через шлюз задачи!

Исключение 11 -отсутствие сегмента (#NP). Реализуется при обращении к дескриптору, который имеет значение бита присутствия Р = 0. Такая ситуация возникает в следующих случаях:

•  попытка загрузить сегментные регистры CS, DS, ES, GS или FS селекторами дескрипторов, у которых бит Р = 0 (загрузка регистра SS приводит к исключению #SS); этот случай может иметь место при переключении задач;

•  попытка загрузить регистр LDTR с помощью команды LLDT селектором дескриптора, у которого бит Р = 0;

•  попытка загрузить регистр TR с помощь команды LTR селектором дескриптора TSS, у которого бит Р = 0;

•  попытка использовать дескриптор шлюза или дескриптор TSS, для которых бит присутствия Р = 0.

Код ошибки содержит индекс селектора, приведшего к возникновению #NP. Если в коде ошибки установлен бит ЕХТ = 1, то это означает, что в результате внешнего прерывания произошло обращение к отсутствующему объекту (например, шлюз прерывания ссылается на отсутствующий сегмент). Если в коде ошибки значение бита ЮТ = 1, то это означает, что индекс кода ошибки ссылается на дескрипторную таблицу ЮТ (например, команда INT n выбирает шлюз, у которого бит присутствия Р = 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 или POP.

Таблица 2.63 Условия недостоверности сегмента TSS

Условие Индекс кода ошибки
Предел сегмента TSS меньше 67h для 32-разрядного TSS или меньше 2Ch для 16-разрядного TSS Индекс селектора TSS
Неверный селектор LDT или LDT не присутствует Индекс селектора LDT
Селектор сегмента стека SS выходит за границу дескрипторной таблицы Индекс селектора SS
Сегмент стека не записываемый Индекс селектора SS
DPL сегмента стека не равно CPL Индекс селектора SS
RPL селектора сегмента стека SS не равно CPL Индекс селектора SS
Селектор сегмента кода CS выходит за границу дескрипторной таблицы Индекс селектора CS
Сегмент кода неисполняемый Индекс селектора CS
DPL неподчиненного сегмента кода не равно CPL Индекс селектора CS
DPL подчиненного сегмента кода больше, чем CPL Индекс селектора CS
Селектор сегмента данных DS, ES, FS или GS выходит за границу дескрипторной таблицы Индекс селектора данных
Сегмент данных не допускает чтение Индекс селектора данных
Комментарии
Нет комментариев.
Добавить комментарий
Пожалуйста, залогиньтесь для добавления комментария.
Рейтинги
Рейтинг доступен только для пользователей.

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

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

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