JMP—Jump (Continued)
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;
IF Itanium System Environment AND PSR.tb THEN IA_32_Exception(Debug);
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;
IF Itanium System Environment AND PSR.tb THEN IA_32_Exception(Debug);
END;
CALL-GATE:
IF call gate DPL < CPL
OR call gate DPL < call gate segment-selector RPL
IF call gate not present THEN #NP(call gate selector); FI;
IF Itanium System Environment THEN IA-32_Intercept(Gate,JMP);
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;
IF code-segment segment descriptor does not indicate a code segment
OR code-segment segment descriptor is conforming and DPL > CPL
OR code-segment segment descriptor is non-conforming and DPL CPL
IF code segment is not present THEN #NP(code-segment selector); FI;
IF instruction pointer is not within code-segment limit THEN #GP(0); FI;
tempEIP DEST(offset);
IF GateSize=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;
4:246
THEN #GP(call gate selector); FI;
THEN #GP(code segment selector); FI;
Volume 4: Base IA-32 Instruction Reference