|
||
Форматы команд 107
|
||
|
||
|
||
|
||
Рис. 2.49. Косвенная адресация
Недостатком косвенной адресации является необходимость в двухкратном обращении к памяти: сначала для извлечения адреса операнда, а затем для обращения к операнду ( = 2t3y). Сверх того задействуется лишняя ячейка памяти для хранения исполнительного адреса операнда. Способу свойственны следующие затраты оборудования:
где яч — разрядность ячейки памяти, хранящей исполнительный адрес; NA — количество ячеек для хранения исполнительных адресов; К,— количество адресуемых операндов. Здесь выражение int(log27Vy определяет разрядность сокращенного адресного поля команды (обычно NA«NJ.
В качестве варианта косвенной адресации, правда, достаточно редко используемого, можно упомянуть многоуровневую или каскадную косвенную адресацию: исп = (··■ (А\д-)> когда к исполнительному адресу ведёт цепочка косвенных адресов. В этом случае один из битов в каждом адресе служит признаком косвенной адресации. Состояние бита указывает, является ли содержимое ячейки очередным адресом в цепочке адресов или это уже исполнительный адрес операнда. Особых преимуществ у такого подхода нет, но в некоторых специфических ситуациях он оказывается весьма удобным, например при обработке многомерных массивов. В то же время очевиден и его недостаток — для доступа к операнду требуется три и более обращений к памяти.
Регистровая адресация
Регистровая адресация (РА) напоминает прямую адресацию. Различие состоит в том, что адресное поле инструкции указывает не на ячейку памяти, а на регистр процессора (рис. 2.50). Идентификатор регистра в дальнейшем будем обозначать буквой R. Обычно размер адресного поля в данном случае составляет три или четыре бита, что позволяет указать соответственно на один из 8 или 16 регистров общего назначения (РОН).
Двумя основными преимуществами регистровой адресации являются: короткое адресное поле в команде и исключение обращений к памяти. Малое число РОН позволяет сократить длину адресного поля команды, то есть СРА « СПА. Кроме того, pa = рои» гДерон ~~ время выборки операнда из регистра общего назначения, при-
|
||
|
||
|
||
108 Глава 2. Архитектура системы команд
|
||
|
||
|
||
|
||
чем iP0H « 2i3y. К сожалению, возможности по использованию регистровой адресации ограничены малым числом РОН в составе процессора.
|
||
|
||
Косвенная регистровая адресация
Косвенная регистровая адресация (КРА) представляет собой косвенную адреса- ■ цию, где исполнительный адрес операнда хранится не в ячейке основной памяти, а в регистре процессора. Соответственно, адресное поле команды указывает не на ячейку памяти, а на регистр (рис. 2.51).
|
||
|
||
|
||
|
||
Рис. 2.51. Косвенная регистровая адресация
Достоинства и ограничения косвенной регистровой адресации те же, что и у обычной косвенной адресации, но благодаря тому, что косвенный адрес хранится не в памяти, а в регистре, для доступа к операнду требуется на одно обращение к памяти меньше. Эффективность косвенной регистровой адресации можно оценить по формулам:
где RPOH - разрядность регистров общегоназначения.
Адресация со смещением
При адресации со смещением исполнительный адрес формируется в результате суммирования содержимого адресного поля команды'с содержимым одного или нескольких регистров процессора (рис. 2.52).
Адресация со смещением предполагает, что адресная часть команды включает в себя как минимум одно поле (Лк). В нем содержится константа, смысл которой в разных вариантах адресации со смещением может меняться. Константа может представлять собой некий базовый адрес, к которому добавляется хранящееся в регистре смещение. Допустим и прямо противоположный подход: базовый адрес находится в регистре процессора, а в полеЛкуказывается смещение относительно этого адреса. В некоторых процессорах для реализации определенных вариантов адресации со смещением предусмотрены специальные регистры, например базовый или индексный. Использование таких регистров предполагается по умолча-
|
||
|
||
|
||
|
||
|
||
нию, поэтому адресная часть команды содержит только поле Ак. Если же составляющая- адреса может располагаться в произвольном регистре общего назначения, то для указания конкретного регистра в команду включается дополнительное поле R (при составлении адреса более чем из двух составляющих в команде будет несколько таких полей). Еще одно поле R может появиться в командах, где смещение перед вычислением исполнительного адреса умножается на масштабный коэффициент. Такой коэффициент заносится в один из РОН, на который и указывает это дополнительное поле. В наиболее общем случае адресация со смещением подразумевает наличие двух адресных полей: Аки R.
В рамках адресации со смещением имеется еще один вариант, при котором исполнительный адрес вычисляется не суммированием, а конкатенацией (присоединением) составляющих адреса. Здесь одна составляющая представляет собой старшую часть исполнительного адреса, а вторая — младшую.
Ниже рассматриваются основные способы адресации со смещением, каждый из которых, впрочем, имеет собственное название.
Относительная адресация
При относительной адресации (ОА) для получения исполнительного адреса операнда содержимое подполя Лккоманды складывается с содержимым счетчика команд (рис. 2.53). Таким образом, адресный код в команде представляет собой смещение относительно адреса текущей команды. Следует отметить, что в момент вычисления исполнительного адреса операнда в счетчике команд может уже быть сформирован адрес следующей команды, что нужно учитывать при выборе величины смещения. Обычно подполе Лктрактуется как двоичное число в дополнительном коде.
Адресация относительно счетчика команд базируется на свойстве локальности, выражающемся в том, Что большая часть обращений происходит к ячейкам, расположенным в непосредственной близости от выполняемой команды. Это позволяет сэкономить на длине адресной части команды, поскольку разрядность под-поля к может быть небольшой. Главное достоинство данного способа адресации состоит в том, что он делает программу перемещаемой в памяти: независимо от
|
||
|
||