LGDT, LIDT
Carga Global/Interrupt Descriptor Table Register
estableVMJITAOTinstruccion
Codificaciones
| Opcode | Instruccion | Op/En | 64 bits | Compat/Legacy | Descripcion |
|---|---|---|---|---|---|
0F 01 /2 | LGDT m16&32 | M | No codificable | Valido | Carga m en GDTR. |
0F 01 /3 | LIDT m16&32 | M | No codificable | Valido | Carga m en IDTR. |
0F 01 /2 | LGDT m16&64 | M | Valido | No codificable | Carga m en GDTR. |
0F 01 /3 | LIDT m16&64 | M | Valido | No codificable | Carga m en IDTR. |
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
modrm.rmlecturabyte 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
Carga los valores en el operando de origen en el registro mundial de tablas de descriptores (GDTR) o el registro de tablas de descriptores interrumpidos (IDTR). El operando de origen especifica una ubicación de memoria de 6 bytes que contiene la dirección base (una dirección lineal) y el límite (tamaño de tabla en bytes) de la tabla de descriptor global (GDT) o la tabla de descriptor de interrupción (IDT). Si el atributo operando-size es de 32 bits, un límite de 16 bits (abajo 2 bytes de los datos de 6 bytes operando) y una dirección base de 32 bits (aproximadamente 4 bytes de los datos operando) se cargan en el registro. Si el atributo el operando-size es de 16 bits, se carga un límite de 16 bits (menores 2 bytes) y una dirección base de 24 bits (tercero, cuarto y quinto byte). Aquí, el byte de alto orden del operando no se utiliza y el byte de alto orden de la dirección base en el GDTR o IDTR se llena de ceros.
Las instrucciones LGDT y LIDT se utilizan sólo en el software del sistema operativo; no se utilizan en los programas de aplicación. Son las únicas instrucciones que cargan directamente una dirección lineal (es decir, no una dirección relacionada con segmentos) y un límite en modo protegido. Se ejecutan comúnmente en modo de direccion real para permitir la inicialización del procesador antes de cambiar a modo protegido.
En modo de 64 bits, el tamaño de operando de la instrucción se fija en 8+2 bytes (una base de 8 bytes y un límite de 2 bytes). Vea la tabla resumen al comienzo de esta sección para la codificación de datos y límites.
Ver "SGDT--Store Global Descriptor Table Register" en el Capítulo 4, del Intel(R) 64 e IA-32 Architectures Software Developer's Manual, Volumen 2B, para información sobre el almacenamiento de los contenidos de GDTR y IDTR.
Operación
IF Instruction is LIDT
THEN
IF OperandSize = 16
THEN
IDTR(Limit) := SRC[0:15];
IDTR(Base) := SRC[16:47] AND 00FFFFFFH;
ELSE IF 32-bit Operand Size
THEN
IDTR(Limit) := SRC[0:15];
IDTR(Base) := SRC[16:47];
FI;
ELSE IF 64-bit Operand Size (* In 64-Bit Mode *)
THEN
IDTR(Limit) := SRC[0:15];
IDTR(Base) := SRC[16:79];
FI;
FI;
ELSE (* Instruction is LGDT *)
IF OperandSize = 16
THEN
GDTR(Limit) := SRC[0:15];
GDTR(Base) := SRC[16:47] AND 00FFFFFFH;
ELSE IF 32-bit Operand Size
THEN
GDTR(Limit) := SRC[0:15];
GDTR(Base) := SRC[16:47];
FI;
ELSE IF 64-bit Operand Size (* In 64-Bit Mode *)
THEN
GDTR(Limit) := SRC[0:15];
GDTR(Base) := SRC[16:79];
FI;
FI;
FI;Banderas afectadas
None.
Excepciones
Modo protegido
#UD | Si se utiliza el prefijo LOCK. |
#GP(0) | Si el nivel actual de privilegios no es 0. 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. |
#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. |
Modo real
#UD | Si se utiliza el prefijo LOCK. |
#GP | Si un operando de memoria dirección efectiva está fuera del límite de segmento CS, DS, ES, FS o GS. |
#SS | Si un operando de memoria dirección efectiva está fuera del límite del segmento SS. |
Modo virtual-8086
#UD | Si se utiliza el prefijo LOCK. |
#GP | Si el nivel actual de privilegios no es 0. |
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. |
#GP(0) | Si el nivel actual de privilegios no es 0. Si la dirección de memoria está en forma no canónica. |
#UD | Si se utiliza el prefijo LOCK. #PF(fault-code) Si ocurre un fallo de pagina. |