<<<    Index    >>>
3-322
INSTRUCTION SET REFERENCE
IRET/IRETDĀ—Interrupt Return (Continued)
If the NT flag is set, the IRET instruction performs a task switch (return) from a nested task (a
task called with a CALL instruction, an interrupt, or an exception) back to the calling or inter-
rupted task. The updated state of the task executing the IRET instruction is saved in its TSS. If
the task is re-entered later, the code that follows the IRET instruction is executed.
Operation
IF PE = 0
THEN 
GOTO REAL-ADDRESS-MODE:;
ELSE 
GOTO PROTECTED-MODE;
FI;
REAL-ADDRESS-MODE;
IF OperandSize = 32
THEN
IF top 12 bytes of stack not within stack limits THEN #SS; FI;
IF instruction pointer not within code segment limits THEN #GP(0); FI;
EIP 
<
 Pop();
CS 
<
 Pop(); (* 32-bit pop, high-order 16 bits discarded *)
tempEFLAGS 
<
 Pop();
EFLAGS 
<
 (tempEFLAGS AND 257FD5H) OR (EFLAGS AND 1A0000H);
ELSE (* OperandSize = 16 *)
IF top 6 bytes of stack are not within stack limits THEN #SS; FI;
IF instruction pointer not within code segment limits THEN #GP(0); FI;
EIP 
<
 Pop();
EIP 
<
 EIP AND 0000FFFFH;
CS 
<
 Pop(); (* 16-bit pop *)
EFLAGS[15:0] 
<
 Pop();
FI;
END;
PROTECTED-MODE:
IF VM = 1 (* Virtual-8086 mode: PE=1, VM=1 *)
THEN 
GOTO RETURN-FROM-VIRTUAL-8086-MODE; (* PE=1, VM=1 *)
FI;
IF NT = 1
THEN 
GOTO TASK-RETURN;( *PE=1, VM=0, NT=1 *)
FI;
IF OperandSize=32
THEN
IF top 12 bytes of stack not within stack limits
THEN #SS(0)
<<<    Index    >>>