THE 80286 INSTRUCTION SET

2.Call gate-The offset part of the destination pointer is ignored. After checking for validity, the processor jumps to the location stored in the call gate descriptor.

3.Task gate-The current task's state is saved in its Task State Segment (TSS), and the TSS named in the task gate is used to load a new context. The outgoing task is marked not busy, the new TSS is marked busy, and execution resumes at the point at which the new task was last suspended.

4.TSS-The current task is suspended and the new task is initiated as in 3 above except that there is no intervening gate.

Following is the list of checks and actions taken for long jumps in protected mode:

JUMP FAR:

If indirect then check access of EA doubleword #GP(O) or #SS(O) if limit violation Destination selector is not null else #GP(O)

Destination selector index is within its descriptor table limits else #GP (selector) Examine AR byte of destination selector for legal values:

JUMP CONFORMING CODE SEGMENT:

Descriptor DPL must be :s CPL else #GP (selector)

Segment must be PRESENT else #NP (selector)

IP must be in code segment limit else #GP(O)

Load CS:IP from destination pOinter

Load CS-cache with new segment descriptor

JUMP NONCONFORMING CODE SEGMENT:

RPL of destination selector must be :s CPL else #GP (selector)

Descriptor DPL must = CPL else #GP (selector)

Segment must be PRESENT else #NP (selector)

IP must be in code segment limit else #GP(O)

Load CS:IP from destination pOinter

Load CS-cache with new segment descriptor

Set RPL field of CS register to CPL

JUMP TO CALL GATE:

Descriptor DPL must be :::: CPL else #GP (gate selector)

Descriptor DPL must be :::: gate selector RPL else #GP (gate selector) Gate must be PRESENT else #NP (gate selector)

Examine selector to code segment given in call gate descriptor: Selector must not be null else #GP(O)

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

If non-conforming, code segment descriptor DPL must = CPL else #GP (CS selector)

If conforming, then code segment descriptor DPL must be :s CPL else #GP (CS selector) Code Segment must be PRESENT else #NP (CS selector)

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

Load CS-cache with new code segment Set RPL of CS to CPL

JUMP TASK GATE:

Gate descriptor DPL must be :::: CPL else #GP (gate selector)

Gate descriptor DPL must be :::: gate selector RPL else #GP (gate selector) Task Gate must be PRESENT else #NP (gate selector)

Examine selector to TSS, given in Task Gate descriptor:

Must specify global in the local/global bit else #GP (TSS selector) Index must be within GDT limits else #GP (TSS selector)

Descriptor AR byte must specify available TSS (bottom bits 00001) else #GP (TSS selector) Task State Segment must be PRESENT else #NP (TSS selector)

SWITCH_TASKS without nesting to TSS

IP must be in code segment limit else #GP(O)

8-57

Page 267
Image 267
Intel 80286 Jump FAR, Jump Conforming Code Segment, Jump Nonconforming Code Segment, Jump to Call Gate, Jump Task Gate