Прерывание 0Dh - Исключение общей защиты ( #GP - General Protection Exception )

Тип исключения - 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 © Александр Семенко.
    TopList

    Hosted by uCoz