Непосредственная адресация
При непосредственной адресации (НА) в адресном поле команды вместо адреса содержится непосредственно сам операнд (рис. 1). Этот способ может применяться при выполнении арифметических операций, операций сравнения, а также для загрузки констант в регистры.
Рис. 1. Непосредственная адресация.
Помимо того, что в адресном поле могут быть указаны только константы, еще одним недостатком данного способа адресации является то, что размер непосредственного операнда ограничен длиной адресного поля команды, которое в большинстве случаев меньше длины машинного слова.
Наиболее интенсивно данный вид адресации используется в арифметических операциях и командах сравнения. В то же время загрузка констант в большинстве программ, очевидно, не такая частая операция.
Непосредственная адресация сокращает время выполнения команды, так как не требуется обращение к памяти за операндом. Кроме того, экономится память, поскольку отпадает необходимость в ячейке для хранения операнда. В плане эффективности этот способ можно считать «идеальным» (СнА = 0, ТнА = 0), и его можно рекомендовать к использованию во всех ситуациях, когда тому не препятствуют вышеупомянутые ограничения.
Прямая адресация
При прямой или абсолютной адресации (ПА) адресный код прямо указывает номер ячейки памяти, к которой производится обращение (рис. 2), то есть адресный код совпадает с исполнительным адресом.
Рис. 2. Прямая адресация.
При всей простоте использования способ имеет существенный недостаток — ограниченный размер адресного пространства, так как для адресации к памяти большой емкости нужно «длинное» адресное поле. Не менее существенным несовершенством можно считать то, что адрес, указанный в команде, не может быть изменен в процессе вычислений (во всяком случае, такое изменение не рекомендуется). Это ограничивает возможности по произвольному размещению программы в памяти.
Прямую адресацию характеризуют следующие показатели эффективности: Cпа = int(log2 Ni ) Тпа = tЗУ
где Ni — количество адресуемых операндов.
Косвенная адресация
Одним из путей преодоления проблем, свойственных прямой адресации, может служить прием, когда с помощью ограниченного адресного поля команды указывается адрес ячейки, в свою очередь, содержащей полноразрядный адрес операнда (рис. 3). Этот способ известен как косвенная адресация (КА). Запись (Ак) означает содержимое ячейки, адрес которой указан в скобках.
При косвенной
адресации содержимое адресного поля
команды остается неизменным, в то время
как косвенный адрес в процессе выполнения
программы можно изменять. Это позволяет
проводить вычисления, когда адреса
операндов заранее неизвестны и появляются
лишь в процессе решения задачи.
Дополнительно такой прием упрощает
обработку массивов и списков, а также
передачу параметров подпрограммам.
Рис. 3. Косвенная адресация
Недостатком косвенной адресации является необходимость в двухкратном обращении к памяти: сначала для извлечения адреса операнда, а затем для обращения к операнду (TКА = 2tЗУ). Сверх того задействуется лишняя ячейка памяти для хранения исполнительного адреса операнда. Способу свойственны следующие затраты оборудования:
CKA = RЯЧ + int(log2 NА) = int(log2 (Ni + NА))
где RЯЧ — разрядность ячейки памяти, хранящей исполнительный адрес; NА — количество ячеек для хранения исполнительных адресов; Ni — количество адресуемых операндов. Здесь выражение int(log2 NА) определяет разрядность сокращенного адресного поля команды (обычно NА << Ni ).
В качестве варианта косвенной адресации, правда, достаточно редко используемого, можно упомянуть многоуровневую или каскадную косвенную адресацию: AИСП = (…(Ак )…) когда к исполнительному адресу ведет цепочка косвенных адресов. Особых преимуществ у такого подхода нет, но в некоторых специфических ситуациях он оказывается весьма удобным, например при обработке многомерных массивов.
