SIDT

Registro de la tabla descriptor interrumpido

estableVMJITAOTinstruccion

Codificaciones

OpcodeInstruccionOp/En64 bitsCompat/LegacyDescripcion
0F 01 /1SIDT mMValidoValidoAlmacene IDTR a m.

Codificacion de operandos

Cada modo es un valor de la columna Op/En de arriba. Dice en que campo de la instruccion codificada va cada operando, en el orden en que se escriben, y si la instruccion lo lee, lo escribe o ambas cosas.

M

  1. modrm.rm escriturabyte ModRM, campo r/m (bits 2-0); con el byte SIB y el desplazamiento cuando el campo mod los pide

Coste medido

Cargando las mediciones de arch-data...

Descripción

Almacena el contenido del registro de tabla de descriptor interrumpido (IDTR) en el operando de destino. El operando de destino especifica una ubicación de memoria de 6 bytes.

En modos no-64 bits, el campo límite de 16 bits del registro se almacena en los 2 bytes bajos de la ubicación de memoria y la dirección base de 32 bits se almacena en los 4 bytes altos.

En modo de 64 bits, el tamaño de operando fijo a 8+2 bytes. La instrucción almacena valores de base de 8 bytes y límite de 2 bytes.

SIDT sólo es útil en el software del sistema operativo; sin embargo, puede ser utilizado en los programas de aplicación sin causar una excepción a ser generado si CR4.UMIP = 0. Ver "LGDT/LIDT--Load Global/Interrupt Descriptor Table Register" en Capítulo 3, Intel(R) 64 e IA-32 Architectures Software Developer's Manual, Volumen 2A, para información sobre la carga del GDTR y IDTR.

Compatibilidad de arquitectura IA-32

La forma de 16 bits de SIDT es compatible con el procesador Intel 286 si no se hacen referencia a los 8 bits superiores. El procesador Intel 286 llena estos bits con 1s; generaciones procesadoras más tarde que el procesador Intel 286 llenan estos bits con 0s.

Operación

IF instruction is SIDT
    THEN
          IF OperandSize =16 or OperandSize = 32 (* Legacy or Compatibility Mode *)
                THEN
                      DEST[0:15] := IDTR(Limit);
                      DEST[16:47] := IDTR(Base); FI; (* Full 32-bit base address stored *)
                ELSE (* 64-bit Mode *)
                      DEST[0:15] := IDTR(Limit);
                      DEST[16:79] := IDTR(Base); (* Full 64-bit base address stored *)
          FI;

FI;

Banderas afectadas

None.

Excepciones

Modo protegido
#GP(0)Si el destino se encuentra en un segmento no escrito. Si la dirección efectiva un operando de memoria está fuera del límite de segmento CS, DS, ES, FS o GS. Si el registro DS, ES, FS o GS se utiliza para acceder a la memoria y contiene un NULL selector de segmento. Si CR4.UMIP = 1 y CPL > 0.
#SS(0)Si un operando de memoria dirección efectiva está fuera del límite del segmento SS. #PF(fault-code) Si un fallo de pagina ocurre.
#AC(0)Si la comprobación de alineación está activada y se hace una referencia de memoria no alineada mientras CPL = 3.
#UDSi se utiliza el prefijo LOCK.
Modo real
#GPSi un operando de memoria dirección efectiva está fuera del límite de segmento CS, DS, ES, FS o GS.
#SSSi un operando de memoria dirección efectiva está fuera del límite del segmento SS.
#UDSi se utiliza el prefijo LOCK.
Modo virtual-8086
#GP(0)Si un operando de memoria dirección efectiva está fuera del límite de segmento CS, DS, ES, FS o GS. Si CR4.UMIP = 1.
#SS(0)Si un operando de memoria dirección efectiva está fuera del límite del segmento SS. #PF(fault-code) Si un fallo de pagina ocurre.
#AC(0)Si la comprobación de alineación está habilitada y se hace una referencia de memoria no alineada.
#UDSi se utiliza el prefijo LOCK.
Modo de compatibilidad
Las mismas excepciones que en modo protegido.
Modo de 64 bits
#SS(0)Si una dirección de memoria que hace referencia al segmento SS está en forma no canónica.
#UDSi se utiliza el prefijo LOCK.
#GP(0)Si la dirección de memoria está en forma no canónica. Si CR4.UMIP = 1 y CPL > 0. #PF(fault-code) Si ocurre un fallo de pagina.
#AC(0)Si la comprobación de alineación está activada y se hace una referencia de memoria no alineada mientras CPL = 3.

Fuentes