Адресация и многозадачность: Логический адрес и возможные методы его формирования (методы адресации)

Печать
Программирование - Архитектура и система команд микропроцессоров x86

 

Логический адрес — это адрес, с которым обычно оперирует программное обеспечение, формируется он из двух величин. Первая — это 16-битный селектор (указатель) сегмента (берется из соответствующего операции сегментного регистра), вторая — 32(16)-битное смещение относительно начала сегмента. Логический адрес существует лишь внутри процессора и имеет смысл для программного обеспечения. Его преобразование в физический адрес для обращения к памяти осуществляется с помощью достаточно сложного механизма, функционирование которого существенно зависит от текущего режима работы процессора.

Программы могут использовать различные методы адресации (методы формирования логического адреса). В общем случае эти методы можно разделить на прямые и косвенные. Отличаются они способом задания 32(16)-битного смещения. Смещение может задаваться в коде программы непосредственным 32(16)-битным значением (прямая адресация), либо путем указания на регистр (регистры), значение в котором является смещением (косвенная адресация). Все возможные способы формирования 32-битного смещения представляются формулой на рис. 2.1. (в режиме 16-битной адресации 32-битные регистры заменяются на соответствующие 16-битные: EAXAX, EBXBX и т.д.).

 

Возможные методы формирования смещения

Рис. 2.1. Возможные методы формирования смещения

 

Для формирования полного логического адреса смещение комбинируется с селектором сегмента. Селектор сегмента берется из одного из сегментных регистров (CS, DS, ES, SS, FS, GS). Используемый сегментный регистр задается либо неявно, либо с помощью префикса замещения сегмента, который предшествует коду команды. Используемые по умолчанию сегментные регистры, зависят от адресуемого объекта (операнд, команда и т.п.) и приведены в следующей таблице.

 

Таблица 2.1. Сегментные регистры, используемые по умолчанию
при формировании логического адреса

Тип адресуемого объекта

Сегментный регистр

Операции

Команды

CS

Любые операции выборки (чтения) команд

Данные из стека

SS

Все операции занесения и чтения данных из стека, а также любые обращения к данным, использующие в качестве регистра базы (Base) регистры EBP или ESP.

Строковые операнды-назначения

ES

Обращения к операндам-назначения команд строковой обработки

Локальные данные

DS

Любые прочие обращения к данным.