Intel 64 and IA-32 Architectures Software Developers Manual Volume 1, Basic Architecture

Vol. 1 3-19
BASIC EXECUTION ENVIRONMENT
Each of the segment registers is associated with one of three types of storage: code,
data, or stack. For example, the CS register contains the segment selector for the
code segment, where the instructions being executed are stored. The processor
fetches instructions from the code segment, using a logical address that consists of
the segment selector in the CS register and the contents of the EIP register. The EIP
register contains the offset within the code segment of the next instruction to be
executed. The CS register cannot be loaded explicitly by an application program.
Instead, it is loaded implicitly by instructions or internal processor operations that
change program control (such as, procedure calls, interrupt handling, or task
switching).
The DS, ES, FS, and GS registers point to four data segments. The availability of
four data segments permits efficient and secure access to different types of data
structures. For example, four separate data segments might be created: one for the
data structures of the current module, another for the data exported from a higher-
level module, a third for a dynamically created data structure, and a fourth for data
shared with another program. To access additional data segments, the application
program must load segment selectors for these segments into the DS, ES, FS, and
GS registers, as needed.
The SS register contains the segment selector for the stack segment, where the
procedure stack is stored for the program, task, or handler currently being executed.
All stack operations use the SS register to find the stack segment. Unlike the CS
register, the SS register can be loaded explicitly, which permits application programs
to set up multiple stacks and switch among them.
Figure 3-7. Use of Segment Registers in Segmented Memory Model
Segment Registers
CS
DS
SS
ES
FS
GS
Code
Segment
Data
Segment
Stack
Segment
Data
Segment
Data
Segment
Data
Segment
All segments
are mapped
to the same
linear-address
space