Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
1 / Lectures / ГосЭк2.doc
Скачиваний:
37
Добавлен:
28.05.2015
Размер:
790.53 Кб
Скачать

10. Способы адресации в пэвм с 32-разрядной архитектурой(Лекц, м.Гук)

В 32-рзрядных ПЭВМ реализованы все основные виды способов адресации: прямая, косвенная, индексная (относительная) и непосредственная.

Особенности реализации каждого из способов адресации зависят от режима работы процессора – реального или защищенного.

В реальном режиме (RM – real mode) физический, или исполнительный, адрес памяти (т.е., адрес, по которому производится обращение к оперативной памяти) представляется двадцатью двоичными разрядами, позволяя адресовать оперативную память объемом 1 мегабайт (220 байт). В защищенном (PM – protected mode) режиме физический адрес памяти представляется тридцатью двумя двоичными разрядами, что позволяет обращаться к оперативной памяти объемом 4 гигабайта (232 байт).

Реальный режим обеспечивает совместимость с первыми 16-разрядными процессорами (Intel 8086/8088). В этом режиме физический адрес формируется из двух 16-разрядных составляющих – сегмента и смещения (называемого также эффективным адресом) посредством их суммирования со сдвигом смещения на четыре двоичных разряда вправо по отношению к сегменту:

физический адрес = SSSS0 + DDDD,

где SSSS – четыре шестнадцатеричные цифры, обозначающие сегмент, а DDDD – четыре шестнадцатеричные цифры, обозначающие смещение.

При формировании адреса в качестве сегмента используется содержимое одного из сегментных регистров, а значение смещения, в зависимости от способа адресации, либо задается непосредственно в команде, либо извлекается из памяти или регистра, либо формируется как сумма компонент (база, индекс, смещение – см. ниже), извлекаемых из регистров, памяти или самой команды. В последнем случае, если сумма превосходит 216 – 1 (т.е. занимает более шестнадцати разрядов) используются только 16 младших разрядов суммы, что ограничивает размер сегмента шестьюдесятью четырьмя Kбайт. Эти варианты и соответствуют основным способам адресации.

В защищенном режиме для формирования адреса используется более сложная схема, которая в общем виде представлена на рисунке ниже.

Рис. Общая схема формирования физического адреса памяти в защищенном режиме

Обозначение RPL (requested privilege) на схеме означает хранимую в двух младших разрядах сегментного регистра привилегию, с которой производится обращение к памяти. Основное назначение этой привилегии – контроль прав доступа в механизме защиты памяти.

На этой схеме в процессе формирования физического адреса можно выделить три этапа:

формирование эффективного адреса (являющегося, по сути, относительным адресом логического или физического сегмента оперативной памяти);

формирование линейного адреса – представляющего собой либо физический адрес оперативной памяти (при выключении блока страничной переадресации) либо виртуальный адрес логического пространства страничной памяти при включенном блоке страничной переадресации;

формирование физического адреса оперативной памяти в блоке страничной переадресации.

Последний из этих этапов не является строго обязательным и может быть отключен установкой в “0” бита 31 (PG – paging enable) в управляющем регистре CR0 процессора.

Действия, которые относятся к тому, что обычно называют способами адресации, выполняются на первом этапе – вычисления эффективного адреса. При вычислении этого адреса может использоваться до четырех компонент: база, индекс, масштаб и смещение.

База (Base) – это величина, обычно представляющая адрес (в логическом сегменте) начала какой-либо области (массива) кодов или данных. В 32-разрядном режиме база может храниться в любом из регистров общего назначения процессора.

Индекс (Index) – это также некоторая величина, представляющая либо относительный адрес элемента в области (массиве) кодов или данных, либо (при отсутствии базы) адрес начала такой области. Индекс, как и база, в 32-разрядном режиме может храниться в любом из регистров общего назначения процессора за исключением регистра ESP (Extended Stack Pointer – расширенный указатель стека).

Масштаб (Scale) – это множитель, используемый для увеличения индекса, который может принимать значения 1, 2, 4 и 8, обеспечивая соответствие формату данных (байт, полуслово, слово, двойное слово) определяемой индексом позиции в области (массиву) данных. Масштаб задается непосредственно в коде команды.

Смещение (Displacement) – число (разрядностью 8 или 32 бита), используемое как относительная величина к адресу (в сегменте), задаваемому базой, индексом или их суммой.

Эффективный адрес определяется по соотношению

эффективный адрес = [База]+ [Индекс * Масштаб] + [Смещение],

где [ ], как обычно, означают возможность наличия или отсутствия охватываемой ими компоненты.

Такое формирование эффективного адреса, позволяет реализовать все основные способы адресации (прямую, косвенную, относительную, непосредственную) и требования к ней (перемещаемость программ в памяти, сокращение разрядности адреса в коде команды, предоставление возможностей обработки массивов и иных информационных объектов). Хотя, например, функция перемещения программ в памяти в защищенном режиме реализуется сегментным (и страничным) механизмом.

Вычисление адреса в соответствии с приведенным выше соотношением при различных сочетаниях компонент дает 8 способов адресации:

Способ адресации (Address Mode)

Способ формирования эффективного адреса (ЭА)

Прямая адресация (Direct Mode)

ЭА = Смещение

Косвенная регистровая адресация (Register Indirect Mode)

ЭА = База

Индексная адресация (Index Mode)

ЭА = Индекс + Смещение

Индексная адресация с масштабированием (Scaled Index Mode)

ЭА = Индекс * Масштаб + Смещение

Базовая адресация (Based Mode)

ЭА = База + Смещение

Базово-индексная адресация (Based Index Mode)

ЭА = База + Индекс

Базово-индексная адресация с масштабированием (Based Scaled Index Mode)

ЭА = База + Индекс * Масштаб

Базово-индексная адресация со смещением (Based Index Mode with Displacement)

ЭА = База + Индекс + Смещение

Базово-индексная адресация с масштабированием и смещением (Based Scaled Index Mode with Displacement)

ЭА = База + Индекс * Масштаб + Смещение


Кроме перечисленных в таблице способов, система команд 32-разрядных процессоров обеспечивает еще два способа адресации, которые не связаны с обращением к оперативной памяти:

- прямая регистровая адресация, при которой операнд расположен в любом регистре процессора

- непосредственная адресация, при которой операнд (1, 2 или 4 байта) находится в самой команде.

Кроме того, в 32-разрядных процессорах для совместимости с процессорами 8086 и 80286 может реализовываться 16-битная модификация перечисленных способов адресации. В этом случае при формировании эффективного адреса масштаб не используется, базовыми регистрами могут быть только BX или BP, индексными – SI или DI, а смещение имеет разрядность 8 или 16 бит. Переключение режимов адресации возможно с помощью префикса команды или соответствующего бита в дескрипторе сегмента кодов.

Соседние файлы в папке Lectures