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