logo

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

Система команд 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

SIDT

Сохранить регистр таблицы дескрипторов прерываний IDTR

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

OF

DF

IF

TF

SF

ZF

AF

PF

CF

 

 

 

 

 

 

 

 

 

 

Код

Команда

Описание

Проц.

Пример

OF 01 /0

SGDT m

Сохранить GDTR в m

Intel286

sgdt [description]

OF 01 /1

SIDT m

Сохранить IDTR в m

Intel286

sidt [bx+2]

Описание:

Команда SIDT копирует содержимое регистра таблицы дескрипторов прерываний IDTR, в шесть байтов памяти, указанных операндом команды. Поле "предел" (LIMIT) регистра копируется в первое слово операнда-назначения. Если атрибут размера операнда равен 16 бит, то следующим трем байтам присваивается значение 24-битного поля "база" (BASE), а четвертый байт неопределен. Если атрибут размера операнда равен 32 бита, то следующим четырем байтам присваивается значение 32-битного поля "база" (BASE) регистра.

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

Операция:

IF Команда IDTR

  THEN

     IF OperandSize = 16

     THEN

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

        DEST[16:39] = IDTR(Base); (* Загружается 24 бита базы *)

        DEST[40:47] = 0;

     ELSE (* Operand Size = 32 *)

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

        DEST[16:47] = IDTR(Base); (* Загружается полный 32-битный адрес *)

     FI;

  ELSE (* Команда SGDT *)

     IF OperandSize = 16

     THEN

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

        DEST[16:39] = GDTR(Base); (* Загружается 24 бита базы *)

        DEST[40:47] = 0;

     ELSE (* Operand Size = 32 *)

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

        DEST[16:47] = GDTR(Base); (* Загружается полный 32-битный адрес *)

  FI;

FI;

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

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

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

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

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

Такие же, как и в режиме реальной адресации.
#PF(Код ошибки) при страничной ошибке.
#AC(0) при невыровненной ссылке в память.

Замечание:

16-битные формы команды SGDT и SIDT совместимы с процессором Intel286, если старшие восемь бит базы не используются. Процессор Intel286 сохраняет единицы в поле операнда-назначения команды, которое соответствует этим битам, тогда как 32-битные процессоры сохраняют в нем нули, если атрибут размера операнда равен 16 бит. Эти биты были специфицированы как неопределенные для команд SGDT и SIDT в Intel286.


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




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

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

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