<<<    Index    >>>
3-61
INSTRUCTION SET REFERENCE
CALL—Call Procedure (Continued)
TASK-GATE:
IF task gate DPL < CPL or RPL 
THEN #GP(task gate selector); 
FI;
IF task gate not present 
THEN #NP(task gate selector); 
FI;
Read the TSS segment selector in the task-gate descriptor;
IF TSS segment selector local/global bit is set to local
OR index not within GDT limits
THEN #GP(TSS selector); 
FI;
Access TSS descriptor in GDT;
IF TSS descriptor specifies that the TSS is busy (low-order 5 bits set to 00001)
THEN #GP(TSS selector); 
FI;
IF TSS not present 
THEN #NP(TSS selector);
FI;
SWITCH-TASKS (with nesting) to TSS;
IF EIP not within code segment limit 
THEN #GP(0); 
FI;
END;
TASK-STATE-SEGMENT:
IF TSS DPL < CPL or RPL
OR TSS descriptor indicates TSS not available
THEN #GP(TSS selector);
FI;
IF TSS is not present 
THEN #NP(TSS selector); 
FI;
SWITCH-TASKS (with nesting) to TSS
IF EIP not within code segment limit 
THEN #GP(0); 
FI;
END;
Flags Affected
All flags are affected if a task switch occurs; no flags are affected if a task switch does not occur.
<<<    Index    >>>