background image

SYSENTER—Fast System Call

INSTRUCTION SET REFERENCE, M-U

Vol. 2B 4-671

The SYSENTER and SYSEXIT instructions were introduced into the IA-32 architecture in the Pentium II processor. 
The availability of these instructions on a processor is indicated with the SYSENTER/SYSEXIT present (SEP) feature 
flag returned to the EDX register by the CPUID instruction. An operating system that qualifies the SEP flag must 
also qualify the processor family and model to ensure that the SYSENTER/SYSEXIT instructions are actually 
present. For example:

IF CPUID SEP bit is set

THEN IF (Family 

=

 

6) and (Model < 3) and (Stepping < 3) 

THEN

SYSENTER/SYSEXIT_Not_Supported; FI;

ELSE 

SYSENTER/SYSEXIT_Supported; FI;

FI;
When the CPUID instruction is executed on the Pentium Pro processor (model 1), the processor returns a the SEP 
flag as set, but does not support the SYSENTER/SYSEXIT instructions.

Operation

IF CR0.PE 

=

 

0 OR IA32_SYSENTER_CS[15:2]

 

=

 0 THEN #GP(0); FI;

RFLAGS.VM ← 0;

(* Ensures protected mode execution *)

RFLAGS.IF ← 0;

(* Mask interrupts *)

IF in IA-32e mode

THEN

RSP ← IA32_SYSENTER_ESP;

RIP ← IA32_SYSENTER_EIP;

ELSE

ESP ← IA32_SYSENTER_ESP[31:0];

EIP ← IA32_SYSENTER_EIP[31:0];

FI;

CS.Selector ← IA32_SYSENTER_CS[15:0] AND FFFCH;

(* Operating system provides CS; RPL forced to 0 *)

(* Set rest of CS to a fixed value *)
CS.Base ← 0;

(* Flat segment *)

CS.Limit ← FFFFFH;

(* With 4-KByte granularity, implies a 4-GByte limit *)

CS.Type ← 11;

(* Execute/read code, accessed *)

CS.S ← 1;

CS.DPL ← 0;

CS.P ← 1;

IF in IA-32e mode

THEN

CS.L ← 1;

(* Entry is to 64-bit mode *)

CS.D ← 0;

(* Required if CS.L = 1 *)

ELSE

CS.L ← 0;

CS.D ← 1;

(* 32-bit code segment*)

FI;
CS.G ← 1;

(* 4-KByte granularity *)

CPL ← 0;

SS.Selector ← CS.Selector + 8;

(* SS just above CS *)

(* Set rest of SS to a fixed value *)
SS.Base ← 0;

(* Flat segment *)

SS.Limit ← FFFFFH;

(* With 4-KByte granularity, implies a 4-GByte limit *)

SS.Type ← 3;

(* Read/write data, accessed *)