操作碼 |
指令 |
說明 |
0F 00 /3 |
LTR r/m16 |
將 r/m16 載入到任務暫存器 |
將源運算元載入到任務暫存器的段選擇器欄位。源運算元(通用暫存器或記憶體位置)包含指向任務狀態段 (TSS) 的段選擇器。段選擇器載入到任務暫存器之後,處理器使用段選擇器在全域性描述符表格 (GDT) 中確定 TSS 的段描述符的位置。接著,它將 TSS 的段限制與基址從段描述符載入到任務暫存器。任務暫存器指向的任務標記為忙,但不發生任務切換。
提供的 LTR 指令用於操作系統軟體;不應該在應用程式中使用它。它只能在 CPL 為 0 時在保護模式中執行。它常用在初始化程式碼,建立要執行的第一個任務。
運算元大小屬性不影響此指令。
IF SRC[Offset) > descriptor table limit OR IF SRC[type) global
THEN #GP(segment selector);
FI;
Read segment descriptor;
IF segment descriptor is not for an available TSS THEN #GP(segment selector); FI;
IF segment descriptor is not present THEN #NP(segment selector);
TSSsegmentDescriptor(busy) 1;
(* Locked read-modify-write operation on the entire descriptor when setting busy flag *)
TaskRegister(SegmentSelector) SRC;
TaskRegister(SegmentDescriptor) TSSSegmentDescriptor;
無。
#GP(0) - 如果目前特權級別不是 0。如果記憶體運算元有效地址超出 CS、DS、ES、FS 或 GS 段限制。如果 DS、ES、FS、或 GS 暫存器用於訪問記憶體,並且它包含空的段選擇器。
#GP(選擇器) - 如果源選擇器指向的段不是 TSS 段,或是指向已處於忙狀態的任務對應的段。如果選擇器指向 LDT,或是超出 GDT 的限制。
#NP(選擇器) - 如果 TSS 標記為不存在。
#SS(0) - 如果記憶體運算元有效地址超出 SS 段限制。
#PF(錯誤程式碼) - 如果發生頁錯誤。
#UD - LTR 指令在實地址模式中無法識別。
#UD - LTR 指令在虛 8086 模式中無法識別。