- •1. Методы оценки производительности эвм(по пособию “Организация эвм”)
- •2. Структура пэвм (по му к выполнению лр)
- •3. Модули (динамических) оперативных зу на бис (по пособию “Организация эвм”)
- •4. Привилегии в пэвм (по архиву сайта: файл prvlg.Doc)
- •6. Формирование адресов микрокоманд (по пособию “Управление “эвм”)
- •7. Иерархия зу вычислительных систем ( пособие “Организация эвм” 1.2.1. Классификация зу по функциональному назначению)
- •8. Сегментная и страничная адресация памяти (первые две страницы – из фирменного руководства Intel)
- •9. Система прерываний пэвм (Лекц, м.Гук)
- •10. Способы адресации в пэвм с 32-разрядной архитектурой(Лекц, м.Гук)
- •11. Передача данных с прямым доступом к памяти (Лекц, м.Гук)
- •12. Особенности эвм с конвейерными архитектурами
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 бит. Переключение режимов адресации возможно с помощью префикса команды или соответствующего бита в дескрипторе сегмента кодов.