LGDT/LIDT - 載入全域性/中斷描述符表格暫存器

操作碼

指令

說明

0F 01 /2

LGDT m16&32

m 載入到 GDTR

0F 01 /3

LIDT m16&32

m 載入到 IDTR

說明

將源運算元中的值載入到全域性描述符表格暫存器 (GDTR) 或中斷描述符表格暫存器 (IDTR)。源運算元指定 6 位元組記憶體位置,它包含全域性描述符表格 (GDT) 或中斷描述符表格 (IDT) 的基址(線性地址)與限制(表格大小,以位元組計)。如果運算元大小屬性是 32 位,則將 16 位限制(6 位元組數據運算元的 2 個低位位元組)與 32 位基址(數據運算元的 4 個高位位元組)載入到暫存器。如果運算元大小屬性是 16 位,則載入 16 位限制(2 個低位位元組)與 24 位基址(第三、四、五位元組)。這裡,不使用運算元的高位位元組,GDTR 或 IDTR 中基址的高位位元組用零填充。

LGDT 與 LIDT 指令僅用在操作系統軟體中;它們不用在應用程式中。在保護模式中,它們是僅有的能夠直接載入線性地址(即,不是段相對地址)與限制的指令。它們通常在實地址模式中執行,以便處理器在切換到保護模式之前進行初始化。

如需有關儲存 GDTR 與 IDTR 內容的詳細資訊,請參閱本章中的 SFENCE - 儲存邊界

操作

IF instruction is LIDT
THEN
IF OperandSize 16
THEN
IDTR(Limit) SRC[0:15];
IDTR(Base) SRC[16:47] AND 00FFFFFFH;
ELSE (* 32-bit Operand Size *)
IDTR(Limit) SRC[0:15];
IDTR(Base) SRC[16:47];
FI;
ELSE (* instruction is LGDT *)
IF OperandSize 16
THEN
GDTR(Limit) SRC[0:15];
GDTR(Base) SRC[16:47] AND 00FFFFFFH;
ELSE (* 32-bit Operand Size *)
GDTR(Limit) SRC[0:15];
GDTR(Base) SRC[16:47];
FI; FI;

影響的標誌

無。

保護模式異常

#UD - 如果源運算元不是記憶體位置。

#GP(0) - 如果目前特權級別不是 0。如果記憶體運算元有效地址超出 CS、DS、ES、FS 或 GS 段限制。如果 DS、ES、FS、或 GS 暫存器用於訪問記憶體,並且它包含空的段選擇器。

#SS(0) - 如果記憶體運算元有效地址超出 SS 段限制。

#PF(錯誤程式碼) - 如果發生頁錯誤。

實地址模式異常

#UD - 如果源運算元不是記憶體位置。

#GP - 如果記憶體運算元有效地址超出 CS、DS、ES、FS 或 GS 段限制。

#SS - 如果記憶體運算元有效地址超出 SS 段限制。

虛 8086 模式異常

#GP(0) - 如果記憶體運算元有效地址超出 CS、DS、ES、FS 或 GS 段限制。