beautypg.com

Intel 253666-024US User Manual

Page 538

background image

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);