Intel 80287, 80286 manual Interrupt Return on Stack, Interrupt Return to Same Level

Models: 80287 80286

1 515
Download 515 pages 45.04 Kb
Page 262
Image 262

THE 80286 INSTRUCTION SET

If Nested Task Flag=O then

INTERRUPT RETURN ON STACK:

Second word on stack must be within stack limits else #SS(O) Return CS selector RPL must be ;::: CPL else #GP (Return selector) If return selector RPL = CPL then

INTERRUPT RETURN TO SAME LEVEL:

Top 6 bytes on stack must be within limits else #SS(O) Return CS selector (at SP+2) must be non-null else #GP(O)

Selector index must be within its descriptor table limits else #GP( Return selector) AR byte mustJndicate code segment else #GP (Return selector)

If non-conforming then code segment OPL must = CPL else #GP (Return selector) If conforming then code segment OPL must be ::s; CPL else #GP (Return selector) Segment must be PRESENT else #NP (Return selector)

IP must be in code segment limit else #GP(O) Load CS:IP from stack

Load CS-cache with new code segment descriptor Load flags with third word on stack

Increment SP by 6

Else

INTERRUPT RETURN TO OUTER PRIVILEGE LEVEL: Top 10 bytes on stack must be within limits else #SS(O) Examine return 'CSselector (at SP+2) and associated descriptor:

Selector must be non-null else #GP(O)

Selector index must be within its descriptor table limits else #GP (Return selector) AR byte must indicate code segment else #GP (Return selector)

If non-conforming then code segment OPL must = CS selector RPL else #GP (Return selector)

If conforming then code segment OPL must be > CPL else #GP (Return selector) Segment must be PRESENT else #NP (Return selector)

Examine return SS selector (at SP+8) and associated descriptor: Selector must be non-nUll else #GP(O)

Selector index must be within its descriptor table limits else #GP (SS selector) Selector RPL must equal the RPL of the return CS selector else #GP (SS selector) AR byte must indicate a writable data segment else #GP (SS selector)

Stack segment OPL must equal the RPL of the return CS selector else #GP (SS selector)

SSmust be PRESENT else #SS (SS selector) IP must be in code segment limit else #GP(O)

Load C5:IP from stack

Load flags with values at (SP+4) Load SS:SP from stack

Set CPL to the RPL of the return CS selector Load the CS-cache with the CS descriptor Load the 5S-cache with the SS descriptor For each of ES and OS:

If the current register setting is not valid for the outer level, then zero the register and clear the valid flag

To be valid, the register setting must satisfy the following properties: Selector index must be within descriptor table limits

AR byte must indicate data or readable code segment If segment is data or non-conforming code, then: DPL must be ;::: CPL. or

OPL must be ;::: RPL.

8-52

Page 262
Image 262
Intel 80287, 80286 manual Interrupt Return on Stack, Interrupt Return to Same Level