Прерывание 0Bh - Исключение неприсутствующего сегмента ( #NP - Segment Not Present )

Тип исключения - Fault (ошибка).
Описание
        Означает, что сброшен флаг присутствия P в дескрипторе сегмента или шлюза. Это исключение генерируется в следующих случаях:
  •  
  • При загрузке регистров CS, DS, ES, FS или GS (для SS генерируется другое исключение - ошибка стека (#SS). Это исключение может возникнуть при переключении задач.
  •  
  • При загрузке LDTR командой LLDT.
  •  
  • При выполнении команды LTR для TSS, отмеченном как неприсутствующий.
  •  
  • При попытке использовать дескриптор шлюза или TSS, отмеченный как неприсутствующий.

            Операционная система обычно использует это исключение для организации виртуальной памяти на уровне сегментов - обработчик загружает данные в сегмент, устанавливает бит присутствия и возобновляет выполнение прерванной программы.

    Код ошибки: содержит селектор дескриптора, вызвавшего исключение. Если флаг EXT установлен, то это значит, что исключение возникло из-за внешнего события (NMI или INTR), вызвавшего прерывание, которое в свою очередь сослалось на неприсутствующий сегмент. Флаг IDT устанавливается, если код ошибки относится к элементу IDT (т.е. ссылка на неприсутствующий шлюз).
    Указатель кода: сохранённые значения CS:EIP обычно указывают на команду, сгенерировавшую исключение. Если исключение произошло при загрузке нового TSS, то CS:EIP будет указывать на текущую команду в новой задаче.
    Изменение состояния программы: не меняется, если исключение возникло в результате загрузки регистра (CS, DS, SS, ES, FS, GS или LDTR), т.к. регистр не будет загружен новым значением. Не меняется так же при попытке обращения к неприсутствующему шлюзу, т.к. переход не производится.

    Вопросы? Замечания? Пишите: sasm@narod.ru

      Copyright © Александр Семенко.
    TopList

    Hosted by uCoz