Intel 253666-024US User Manual
Page 538

3-492 Vol. 2A
IRET/IRETD—Interrupt Return
INSTRUCTION SET REFERENCE, A-M
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;
EIP ← Pop(); (* 16-bit pop; clear upper 16 bits *)
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); FI;
tempEIP
← Pop();
tempCS
← Pop();
tempEFLAGS
← Pop();
ELSE (* OperandSize
=
16 *)
IF top 6 bytes of stack are not within stack limits
THEN #SS(0); FI;
tempEIP
← Pop();
tempCS
← Pop();
tempEFLAGS
← Pop();
tempEIP
← tempEIP AND FFFFH;
tempEFLAGS
← tempEFLAGS AND FFFFH;
FI;
IF tempEFLAGS(VM)
=
1 and CPL
=
0
THEN
GOTO RETURN-TO-VIRTUAL-8086-MODE;
ELSE
GOTO PROTECTED-MODE-RETURN;
FI;
IA-32e-MODE:
IF NT = 1
THEN #GP(0);