
- •2.9 Способы адресации операндов
- •2.9.1 Непосредственная и прямая адресации
- •2.9.2 Косвенная адресация
- •2.9.3 Регистровая адресация
- •2.9.4 Косвенная регистровая адресация
- •2.9.5 Адресация со смещением
- •2.9.6 Относительная адресация
- •2.9.7 Базовая регистровая адресация
- •2.9.8 Индексная адресация
- •2.9.9 Страничная адресация
- •2.9.10 Блочная адресация
- •2.9.11 Использование видов адресации
2.9.4 Косвенная регистровая адресация
Косвенная
регистровая адресация
(КРА)
представляет собой косвенную адресацию,
где исполнительный адрес операнда
хранится не в ячейке основной памяти,
а в регистре процессора. Соответственно,
адресное поле команды указывает не на
ячейку памяти, а на регистр, как показано
на рисунке 2.26.
Рисунок
2.26 – Косвенная регистровая
адресация
Достоинства и ограничения
косвенной регистровой адресации те же,
что и у обычной косвенной адресации, но
благодаря тому, что косвенный адрес
хранится не в памяти, а в регистре, для
доступа к операнду требуется на одно
обращение к памяти меньше.
^
2.9.5 Адресация со смещением
При
адресации со смешением исполнительный
адрес формируется в результате
суммирования содержимого адресного
поля команды с содержимым одного или
нескольких регистров процессора.
Адресация
со смещением
предполагает,
что адресная часть команды включает в
себя как минимум одно поле (Ак).
В нем содержится константа, смысл которой
в разных вариантах адресации со смешением
может меняться. Константа может
представлять собой некий базовым адрес,
к которому добавляется хранящееся в
регистре смещение. Допустим и прямо
противоположный подход: базовый адрес
находится в регистре процессора, а в
поле Ак
указывается смещение относительно
этого адреса. В некоторых процессорах
для реализации определенных вариантов
адресации со смешением предусмотрены
специальные регистры, например базовый
или индексный. Использование таких
регистров предполагается по умолчанию,
поэтому адресная часть команды содержит
только поле Ак.
Если
же составляющая адреса может располагаться
в произвольном регистре общего назначения,
то для указания конкретного регистра
в команду включается дополнительное
поле R (при составлении адреса более чем
из двух составляющих в команде будет
несколько таких полей). Еще одно поле Я
может появиться в командах, где смещение
перед вычислением исполнительного
адреса умножается на масштабный
коэффициент. Такой коэффициент заносится
в один из РОН, на который и указывает
это дополнительное поле. В наиболее
общем случае адресация со смещением
подразумевает наличие двух адресных
полей: Ак
и R. Общая схема адресации со смещением
представлена на рисунке 2.26.
Рисунок
2.26 –Адресация со смещением
В рамках
адресации со смещением имеется еще один
вариант, при котором исполнительный
адрес вычисляется не суммированием, а
конкатенацией
(присоединением) составляющих адреса.
Здесь одна составляющая представляет
собой старшую часть исполнительного
адреса, а вторая – младшую.
Ниже
рассматриваются основные способы
адресации со смещением, каждый из
которых, впрочем, имеет собственное
название.
^
2.9.6 Относительная адресация
При относительной адресации (ОА) для получения исполнительного адреса операнда содержимое подполя Ак команды складывается с содержимым счетчика команд. Таким образом, адресный код в команде представляет собой смещение относительно адреса текущей команды. Следует отметить, что в момент вычисления исполнительного адреса операнда в счетчике команд может уже быть сформирован адрес следующей команды, что нужно учитывать при выборе величины смещения. Обычно подполе Ак трактуется как двоичное число в дополнительном коде. Адресация относительно счетчика команд базируется на свойстве локальности, выражающемся в том, что большая часть обращений происходит к ячейкам, расположенным в непосредственной близости от выполняемой команды. Это позволяет сэкономить на длине адресной части команды, поскольку разрядность подполя Ак может быть небольшой. Главное достоинство данного способа адресации состоит в том, что он делает программу перемещаемой в памяти: независимо от текущего расположения программы в адресном пространстве взаимное положение команды и операнда остается неизменным. ^