logo

Главная Система команд x86 Базовая система команд CPU LGDT

Система команд x86

Программирование - Архитектура и система команд микропроцессоров x86
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

LGDT

Загрузить регистр глобальной таблицы дескрипторов GDTR

Влияние команды на флаги и форматы команды:

OF

DF

IF

TF

SF

ZF

AF

PF

CF

 

 

 

 

 

 

 

 

 

 

Код

Команда

Описание

Проц.

Пример

0F 01 /2

LGDT m16&32

Загрузить операнд из памяти в регистр GDTR

Intel286

lgdt globalT

0F 01 /3

LIDT m16&32

Загрузить операнд из памяти в регистр LDTR

Intel286

lidt [ebx]

Описание:

Команды LGDT и LIDT загружают линейный базовый адрес и значение предела из шестибайтного операнда в памяти в регистр GDTR или IDTR соответственно.

Если с командами LGDT и LIDT используется 16-битный атрибут размера операнда, то регистр загружается 16-битным пределом и 24-битной базой, а старшие 8 бит шестибайтного операнда не используются. Если используется 32-битный атрибут размера операнда, то загружаются 16-битный предел и 32-битная база, а старшие 8 бит шестибайтного операнда используются как старшие биты базового адреса таблицы дескрипторов.

Команды SGDT и SIDT являются обратными по отношению к LGDT и LIDT, они сохраняют в памяти все 48 бит из регистров GDTR и IDTR.

В 16-битных процессорах (8086, 80186, Intel286) старшие 8 бит сохраненного значения после выполнения команд SGDT или SIDT не определены.

Для 32-битных процессоров в старшие 8 бит записываются старшие 8 бит базового адреса таблицы дескрипторов для размеров операндов и 16, и 32 бита. Если команда LGDT или LIDT используется с 16-битным операндом для загрузки регистра, сохраненного командой SGDT или SIDT, то старшие 8 бит базового адреса таблицы дескрипторов загружаются как нули.

Команды LGDT и LIDT используются в системном программном обеспечении, они не используются в прикладных программах. В защищенном режиме только эти команды используют в качестве операнда непосредственный линейный адрес (т.е. не смещение в сегменте).

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

Операция:

IF (Команда типа LIDT)

THEN

  IF OperandSize = 16

     THEN

        IDTR.Limit = SRC[0:15];

        IDTR.Base = SRC[16:47] AND 00FFFFFFH;

     ELSE

        IDTR(Limit) = SRC[0:15];

        IDTR(Base) = SRC[16:47];

  FI;

ELSE (* Команда типа LGDT *)

  IF OperandSize = 16

     THEN      

        GDTR.Limit = SRC[0:15];

        GDTR.Base = SRC[16:47] AND 00FFFFFFH;

     ELSE

        GDTR(Limit) = SRC[0:15];

        GDTR(Base) = SRC[16:47];

  FI;

FI;

Особые ситуации защищенного режима:

#UD, если операнд-источник не является операндом в памяти.
#GP(0), если текущий уровень привилегий не равен 0, также если используется некорректный эффективный адрес операнда в памяти в сегментах CS, DS, ES, FS, GS или нулевой селектор.
#SS(0) при использовании некорректного эффективного адреса в сегменте SS.
#PF(Код ошибки) при страничной ошибке.

Особые ситуации режима реальной адресации:

#UD, если операнд-источник не является операндом в памяти.
#GP, если любая часть операнда находится вне пространства эффективных адресов в сегментах CS, DS, ES, FS или GS.
#SS, если любая часть операнда находится вне пространства эффективных адресов в сегменте SS.

Особые ситуации режима V86:

#GP(0), если используется некорректный эффективный адрес операнда в памяти в сегментах CS, DS, ES, FS, GS.


Входит в группу команд: Базовая система команд CPU




Все права защищены © Алексей Ровдо, 1994-2023. Перепечатка возможна только по согласованию с владельцем авторских прав. admin@club155.ru

Top.Mail.Ru       Сервер радиолюбителей России - схемы, документация,

 соревнования, дипломы, программы, форумы и многое другое!   схемы новости электроники