3-337
INSTRUCTION SET REFERENCE
JMPJump (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;