Косвенная адресация

 

Одним из путей преодоления проблем, свойственных прямой адресации, может служить прием, когда с помощью ограниченного адресного поля команды указы­вается адрес ячейки, в свою очередь, содержащей полноразрядный адрес операнда (рис. 23). Этот способ известен как косвенная адресация (КА). Запись (Лк) озна­чает содержимое ячейки, адрес которой указан в скобках.

При косвенной адресации содержимое адресного поля команды остается неиз­менным, в то время как косвенный адрес в процессе выполнения программы мож­но изменять. Это позволяет проводить вычисления, когда адреса операндов зара­нее неизвестны и появляются лишь в процессе решения задачи. Дополнительно такой прием упрощает обработку массивов и списков, а также передачу парамет­ров подпрограммам.

Рис. 23. Косвенная адресация.

 

Недостатком косвенной адресации является необходимость в двухкратном об­ращении к памяти: сначала для извлечения адреса операнда, а затем для обраще­ния к операнду (ТКА = 2 tЗУ). Сверх того задействуется лишняя ячейка памяти для хранения исполнительного адреса операнда. Способу свойственны следующие за­траты оборудования:

ска = Rяч + int(log2NA) = int(log2(NA + Ni),

где RЯЧ— разрядность ячейки памяти, хранящей исполнительный адрес; NA — ко­личество ячеек для хранения исполнительных адресов; Nt — количество адресуе­мых операндов. Здесь выражение int(log2NA) определяет разрядность сокращен­ного адресного поля команды (обычно NA << Ni).

В качестве варианта косвенной адресации, правда, достаточно редко использу­емого, можно упомянуть многоуровневую или каскадную косвенную адресацию, когда к исполнительному адресу ведет цепочка косвенных адре­сов. В этом случае один из битов в каждом адресе служит признаком косвенной адресации. Состояние бита указывает, является ли содержимое ячейки очередным адресом в цепочке адресов или это уже исполнительный адрес операнда. Особых преимуществ у такого подхода нет, но в некоторых специфических ситуациях он оказывается весьма удобным, например при обработке многомерных массивов. В то же время очевиден и его недостаток — для доступа к операнду требуется три и болееобращений к памяти.