<<<    Index    >>>
3-337
INSTRUCTION SET REFERENCE
JMP—Jump (Continued)
GO TO CALL-GATE;
GO TO TASK-GATE;
GO TO TASK-STATE-SEGMENT;
ELSE 
#GP(segment selector);
FI;
CONFORMING-CODE-SEGMENT:
IF DPL > CPL THEN #GP(segment selector); FI;
IF segment not present THEN #NP(segment selector); FI;
tempEIP 
<
 DEST(offset);
IF OperandSize=16 
THEN tempEIP 
<
 tempEIP AND 0000FFFFH; 
FI;
IF tempEIP not in code segment limit THEN #GP(0); FI;
CS 
<
 DEST(SegmentSelector); (* segment descriptor information also loaded *)
CS(RPL) 
<
 CPL
EIP 
<
 tempEIP;
END;
NONCONFORMING-CODE-SEGMENT:
IF (RPL > CPL) OR (DPL 
?
 CPL) THEN #GP(code segment selector); FI;
IF segment not present THEN #NP(segment selector); FI;
IF instruction pointer outside code segment limit THEN #GP(0); FI;
tempEIP 
<
 DEST(offset);
IF OperandSize=16 
THEN tempEIP 
<
 tempEIP AND 0000FFFFH; 
FI;
IF tempEIP not in code segment limit THEN #GP(0); FI;
CS 
<
 DEST(SegmentSelector); (* segment descriptor information also loaded *)
CS(RPL) 
<
 CPL
EIP 
<
 tempEIP;
END;
CALL-GATE:
IF call gate DPL < CPL 
OR call gate DPL < call gate segment-selector RPL 
THEN #GP(call gate selector); FI;
IF call gate not present THEN #NP(call gate selector); FI;
IF call gate code-segment selector is null THEN #GP(0); FI;
IF call gate code-segment selector index is outside descriptor table limits
THEN #GP(code segment selector); FI;
Read code segment descriptor;
<<<    Index    >>>