Сегментные регистры используются для хранения селекторов сегментов. Процессор Pentium содержит шесть сегментных регистров CS, SS, DS, ES, FS, GS, содержащих селекторы сегментов кода CS, стека SS и данных DS, ES, FS, GS. Каждый сегментный регистр указывает на конкретный сегмент, используемый программой в текущий момент времени. В любой момент времени до шести сегментов памяти непосредственно доступны программе. Однако программа может обращаться к существенно большему числу сегментов. Остальные сегменты могут быть использованы путем загрузки их селекторов в сегментные регистры из прикладной программы во время ее выполнения. Единственным требованием является то, что загрузка соответствующего сегментного регистра должна быть выполнена до обращения к искомому сегменту.
Назначение сегментных регистров
Сегмент, содержащий выполняемые команды, называется сегментом кода, и его селектор находится в сегментном регистре CS (Current Code Segment). Системой команд процессора х86 не предусмотрена непосредственная инициализация регистра CS. Изменить его содержимое можно только косвенным образом при выполнении команд безусловного перехода JMP addr, вызова подпрограмм CALL addr и возврата из них RET, а также при обработке внутренних и внешних прерываний. Адрес текущей выполняемой команды (смещение внутри сегмента команд) задается с помощью специального регистра - указателя команд ЕIP (Instruction Pointer), который выполняет те же функции, что и счетчик команд РС в традиционных структурах. При обычной работе значение ЕIP определяет смещение выбираемой из памяти команды. Как правило, это смещение из-за опережающей выборки команд не совпадает со смещением очередной выполняемой команды, находящейся в этот момент на выходе очереди команд. Поэтому при запоминании содержимого ЕIP в стеке, например, при вызове подпрограмм значение ЕIР автоматически корректируется, чтобы адресовать команду, которая будет выполняться при возврате в основную программу. Прямой доступ к содержимому указателя команд ЕIP также не предусмотрен. Значение ЕIP может быть изменено косвенным образом при выполнении команд условного и безусловного переходов.
Регистры DS, ES, FS, GS являются регистрами сегментов данных. Они позволяют организовать эффективный и безопасный доступ к различным структурам данных.
15 0 63 0
CS |
Атрибуты |
Базовый адрес |
Размер сегмента |
CSт |
|
SS |
SSт |
||||
DS |
DSт |
||||
ES |
ESт |
||||
FS |
FSт |
||||
GS |
GSт |
Сегментные 64-разрядные кэш-регистры сегментов регистры кода, данных и стека.
31 0 15 0
GDTR |
Базовый адрес сегмента |
Предел |
IDTR |
Базовый адрес сегмента |
Предел |
Регистры системных адресов дескрипторных таблиц
15 0 63 0
TR |
Селектор |
Атрибуты |
Базовый адрес сегмента |
Размер сегмента |
TRт |
|
LDTR |
Селектор |
Атрибуты |
Базовый адрес сегмента |
Размер сегмента |
LDTRт |
Регистры системных 64-разрядные кэш-регистры сегментов системных сегментов
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.