Intel 64 and IA-32 Architectures Software Developers Manual Volume 3A, System Programming Guide, Part 1
Vol. 3A 3-17
PROTECTED-MODE MEMORY MANAGEMENT
Stack segments are data segments which must be read/write segments. Loading the
SS register with a segment selector for a nonwritable data segment generates a
general-protection exception (#GP). If the size of a stack segment needs to be
changed dynamically, the stack segment can be an expand-down data segment
(expansion-direction flag set). Here, dynamically changing the segment limit causes
stack space to be added to the bottom of the stack. If the size of a stack segment is
intended to remain static, the stack segment may be either an expand-up or expand-
down type.
The accessed bit indicates whether the segment has been accessed since the last
time the operating-system or executive cleared the bit. The processor sets this bit
whenever it loads a segment selector for the segment into a segment register,
assuming that the type of memory that contains the segment descriptor supports
processor writes. The bit remains set until explicitly cleared. This bit can be used both
for virtual memory management and for debugging.
For code segments, the three low-order bits of the type field are interpreted as
accessed (A), read enable (R), and conforming (C). Code segments can be execute-
only or execute/read, depending on the setting of the read-enable bit. An
execute/read segment might be used when constants or other static data have been
placed with instruction code in a ROM. Here, data can be read from the code segment
Table 3-1. Code- and Data-Segment Types
Type Field Descriptor
Type
Description
Decimal 11 10
E
9
W
8
A
0
1
2
3
4
5
6
7
0
0
0
0
0
0
0
0
0
0
0
0
1
1
1
1
0
0
1
1
0
0
1
1
0
1
0
1
0
1
0
1
Data
Data
Data
Data
Data
Data
Data
Data
Read-Only
Read-Only, accessed
Read/Write
Read/Write, accessed
Read-Only, expand-down
Read-Only, expand-down, accessed
Read/Write, expand-down
Read/Write, expand-down, accessed
CRA
8
9
10
11
12
13
14
15
1
1
1
1
1
1
1
1
0
0
0
0
1
1
1
1
0
0
1
1
0
0
1
1
0
1
0
1
0
1
0
1
Code
Code
Code
Code
Code
Code
Code
Code
Execute-Only
Execute-Only, accessed
Execute/Read
Execute/Read, accessed
Execute-Only, conforming
Execute-Only, conforming, accessed
Execute/Read-Only, conforming
Execute/Read-Only, conforming,
accessed