操作碼 |
指令 |
說明 |
0F 01 /0 |
SGDT m |
將 GDTR 儲存到 m |
0F 01 /1 |
SIDT m |
將 IDTR 儲存到 m |
將全域性描述符表格暫存器 (GDTR) 或中斷描述符表格暫存器 (IDTR) 中的內容儲存到目標運算元。目標運算元是指定 6 位元組記憶體位置。如果運算元大小屬性為 32 位,則暫存器的 16 位限制欄位儲存到記憶體位置的 2 個低位位元組,32 位基址儲存到 4 個高位位元組。如果運算元大小屬性為 16 位,則限制欄位儲存在 2 個低位位元組,24 位基址儲存在第三、四及五位元組,第六位元組使用 0 填充。
SGDT 與 SIDT 指令僅在操作系統軟體中有用;不過它們也可以在應用程式中使用,而不會導致產生異常。
如需有關載入 GDTR 與 IDTR 的詳細資訊,請參閱本章中的 LGDT/LIDT - 載入全域性/中斷描述符表格暫存器。
如果不引用高 8 位,則 16 位形式的 SGDT 與 SIDT 指令與英特爾(R) 286 處理器相容。英特爾(R) 286 處理器使用 1 填充這些位;奔騰(R) Pro、奔騰、Intel486™ 及 Intel386™ 處理器使用 0 填充這些位。
IF instruction is IDTR
THEN
IF OperandSize 16
THEN
DEST[0:15] IDTR(Limit);
DEST[16:39] IDTR(Base); (* 24 bits of base address loaded; *)
DEST[40:47] 0;
ELSE (* 32-bit Operand Size *)
DEST[0:15] IDTR(Limit);
DEST[16:47] IDTR(Base); (* full 32-bit base address loaded *)
FI;
ELSE (* instruction is SGDT *)
IF OperandSize 16
THEN
DEST[0:15] GDTR(Limit);
DEST[16:39] GDTR(Base); (* 24 bits of base address loaded; *)
DEST[40:47] 0;
ELSE (* 32-bit Operand Size *)
DEST[0:15] GDTR(Limit);
DEST[16:47] GDTR(Base); (* full 32-bit base address loaded *)
FI; FI;
無。
#UD - 如果目標運算元是暫存器。
#GP(0) - 如果目標位於不可寫的段。如果記憶體運算元有效地址超出 CS、DS、ES、FS 或 GS 段限制。如果 DS、ES、FS、或 GS 暫存器用於訪問記憶體,並且它包含空的段選擇器。
#SS(0) - 如果記憶體運算元有效地址超出 SS 段限制。
#PF(錯誤程式碼) - 如果發生頁錯誤。
#AC(0) - 如果在 CPL 為 3 且啟用對齊檢查的情況下發生未對齊的記憶體訪問。
#UD - 如果目標運算元是暫存器。
#GP - 如果記憶體運算元有效地址超出 CS、DS、ES、FS 或 GS 段限制。
#SS - 如果記憶體運算元有效地址超出 SS 段限制。
#UD - 如果目標運算元是暫存器。
#GP(0) - 如果記憶體運算元有效地址超出 CS、DS、ES、FS 或 GS 段限制。
#SS(0) - 如果記憶體運算元有效地址超出 SS 段限制。
#PF(錯誤程式碼) - 如果發生頁錯誤。
#AC(0) - 如果在啟用對齊檢查的情況下發生未對齊的記憶體訪問。