- •Глава 14. Способы адресации операндов
- •15.1. Непосредственная адресация (операнд в команде)
- •15.2. Прямая адресация
- •15.3. Регистровая адресация
- •15.4. Косвенная адресация
- •15.5. Косвенная адресация через память
- •15.6. Косвенная регистровая адресация
- •15.7. Индексная и базовая адресации
- •15.9. Относительная адресация
- •15.8. Индексная адресация
- •15.10. Контрольные вопросы
15.3. Регистровая адресация
Регистровая адресация напоминает прямую адресацию. Различие состоит в том, что вторая часть кода исполнительного адреса в команде указывает не на ячейку оперативной памяти, а на регистр общего назначения R (рис. 15.3). Размер поля R зависит от количества регистров общего назначения.
Основными преимуществами регистровой адресации являются: короткое поле R в команде и быстрое формирование исполнительного адреса операнда.
Рис. 15.3. Регистровая адресация
15.4. Косвенная адресация
Косвенная адресация подразумевает, что исполнительный адрес находится либо в одном из регистров общего назначения, либо в оперативной памяти по адресу, заданному в команде. И регистр общего назначения, и исполнительный адрес, заданный в команде, называются указателями. Косвенная адресация и использование указателей являются очень важными и исключительно мощными концепциями программирования. Их суть можно понять, проведя аналогию с процессом поиска сокровищ. Предположим, чтобы найти таковые, необходимо идти в дом, расположенный по определенному адресу. Но там находится не сокровище, а записка, в которой указан совершенно другой адрес. Заменив одну записку другой, можно изменить адрес сокровища, но исходное указание (команда) останется неизменным. Изменение содержимого записки эквивалентно изменению содержимого указателя в программе. Это позволяет проводить вычисления, когда адреса операндов заранее неизвестны и появляются лишь в процессе решения задачи.
15.5. Косвенная адресация через память
Пример формирования исполнительного адреса операнда приведен на рис. 15.4.
Рис. 15.4. Косвенная адресация
Недостатком косвенной адресации через память является необходимость в двукратном обращении к оперативной памяти: сначала для извлечения исполнительного адреса операнда, а затем для обращения к операнду. Сверх того задействуется лишняя ячейка оперативной памяти для хранения адреса операнда.
В современных архитектурах процессоров косвенная адресация используется редко.
15.6. Косвенная регистровая адресация
И
сполнительный
адрес операнда хранится в регистре
общего назначения R,
соответственно, адресное поле команды
указывает не на ячейку оперативной
памяти, а на регистр общего назначения
R
(рис. 15.5).
Рис. 15.5. Косвенная регистровая адресация
Косвенная регистровая адресация применяется весьма широко.
15.7. Индексная и базовая адресации
Индексация и базовая адресация очень похожи. В самом общем случае исполнительный адрес операнда формируется в результате суммирования содержимого поля смещения команды с содержимым одного или двух регистров общего назначения.
В поле «смещение» содержится константа, смысл которой в разных вариантах адресаций может меняться. Например, базовый адрес находится в регистре общего назначения процессора, а в поле «смещение» указывается смещение относительно этого адреса. В некоторых архитектурах предусмотрены специальные регистры, например базовый или индексный. Использование таких регистров предполагается по умолчанию, поэтому адресная часть команды содержит только поле «смещение». Если же составляющая адреса может располагаться в произвольном регистре общего назначения, то для указания конкретного регистра в код исполнительного адреса команды включается одно или два поля с номерами регистров общего назначения (например, поля Ri и Rk). В наиболее общем случае адресация со смещением подразумевает наличие двух адресов регистров и смещения.
В рамках адресации со смещением имеется еще один вариант, при котором исполнительный адрес вычисляется не суммированием, а конкатенацией (присоединением) составляющих адреса. Здесь одна составляющая представляет собой старшую часть адреса, а вторая — младшую.
Пример формирования исполнительного адреса приведен на рис. 15.6.
Рис. 15.6. Формирование исполнительного адреса в случае индексной или базовой адресации
Базовую регистровую адресацию обычно используют для доступа к элементам массива, положение которого в оперативной памяти в процессе вычислений может меняться. Например, в базовый регистр заносится начальный адрес массива, а адрес элемента массива указывается в поле «смещение» команды в виде смещения относительно начального адреса массива. Достоинство данного способа адресации в том, что смещение имеет меньшую длину, чем полный адрес, и это позволяет сократить длину поля кода адреса команды. Короткое смещение расширяется до полной длины адреса путем добавления слева разрядов, совпадающих со значением знакового разряда смещения.
Возможен и другой вариант, когда в поле смещения указывается начальный адрес массива, а адрес элемента массива указывается в регистре общего назначения.
