Тип исключения - Fault (ошибка).
Описание
Означает, что процессор обнаружил одно из условий нарушения защиты:
Превышение предела сегмента при доступе через регистры CS, DS, ES, FS или GS.
| Превышение предела сегмента при ссылке на дескрипторную таблицу (за исключением случаев переключения задач или стеков).
| Передача управления в неисполняемый сегмент.
| Запись в сегмент кода или только читаемый сегмент данных.
| Чтение из только исполняемого сегмента кода.
| Загрузка в SS селектора только читаемого сегмента (кроме случая переключения задач)
| Загрузка в регистры SS, DS, ES, FS или GS селектора системного сегмента.
| Загрузка в регистры DS, ES, FS или GS селектора для только исполняемого кода.
| Загрузка в SS селектора исполняемого сегмента или нулевого селектора.
| Загрузка в CS селектора сегмента данных или нулевого селектора.
| Доступ к памяти через регистры DS, ES, FS или GS, когда в них содержится нулевой селектор.
| Переключение на занятую задачу (CALL или JMP на TSS)
| Переключение на незанятую задачу командой IRET.
| Использование селектора TSS в LDT при переключении задач (TSS может быть только в GDT).
| Нарушение любого правила доступа по привилегиям.
| Превышение размера команды (максимальный размер - 15 байт); это возможно только при наличии лишних префиксов.
| Загрузка регистра CR0 с установленным флагом PG (включить механизм трансляции страниц) и сброшенным флагом PE (защита отключена).
| Загрузка регистра CR1 с установленным флагом NW и сброшенным флагом CD.
| Ссылка на элемент IDT (через прерывание или исключение), не являющийся шлюзом прерывания, ловушки или задачи.
| Попытка доступа к обработчику исключения или прерывания через шлюз прерывания или ловушки из виртуального-8086 режима, когда DPL сегмента кода обработчика больше 0.
| Попытка записи 1 в зарезервированный бит в CR4.
| Попытка выполнить привилегированную команду, когда CPL > 0
| Запись в зарезервированный бит в MSR
| Доступ к шлюзу, содержащему нулевой селектор
| Выполнение команды INT n когда CPL > DPL шлюза прерывания, ловушки или задачи.
| Селектор сегмента в шлюзе вызова, прерывания или ловушки не указывает на дескриптор сегмента кода.
| Операнд-селектор команды LLDT локального типа (с битом TI=1) или не указывает на дескриптор LDT.
| Операнд-селектор команды LTR локального типа или указывает на недопустимый TSS.
| Нулевой целевой селектор сегмента кода для команд вызова, перехода или возврата.
| Если флаги PAE и/или PSE в CR4 установлены и любой из зарезервированных битов в элементе таблицы PDP установлен. Эти биты проверяются при записи в регистры CR0, CR3 или CR4 (перезагружается элемент таблицы PDP).
| Попытка записи ненулевых значений в зарезервированные биты регистра MXCSR.
| Выполнение команд SSE или SSE2, оперирующих 128-разрядными операндами, требующих выравнивания, не выравненными на границу 16 байт.
| |
Программа или задача может возобновляться после обработки исключения общей защиты.
Код ошибки: содержит селектор дескриптора сегмента, если исключение произошло при загрузке селектора. Иначе - 0.
Указатель кода: сохранённые значения CS:EIP указывают на команду, сгенерировавшую исключение.
Изменение состояния программы: нет, т.к. исключение происходит перед выполнением команды.
Вопросы? Замечания? Пишите: sasm@narod.ru |
Copyright © Александр Семенко. |