При непосредственной адресации в адресном поле команды вместо адреса содержится непосредственно сам операнд. Этот способ может применяться при выполнении арифметических операций, операций сравнения, а также для загрузки констант в регистры.
Когда операндом является число, оно обычно представляется в дополнительном коде. При записи в регистр, имеющий разрядность, превышающую длину непосредственного операнда, операнд размещается в младшей части регистра, а оставшиеся свободные позиции заполняются значениями знакового бита операнда.
Помимо того, что в адресном поле могут быть указаны только константы, ещё одним недостатком данного способа адресации является то, что размер непосредственного операнда ограничен длиной адресного поля команды, которое в большинстве случаев меньше длины машинного слова.
Данный вид адресации используется в арифметических операциях и командах, в то же время загрузка констант в большинстве программ не совсем частая операция.
Непосредственная адресация сокращает время выполнения команды, так как не требуется обращение к ЗУ за операндом. Кроме того, экономится память, поскольку отпадает необходимость в ячейке для хранения операнда. В плане эффективности этот способ можно считать "идеальным".
Способ: прямая адресация
При прямой, или абсолютной адресации адресный код прямо указывает номер ячейки памяти, к которой производится обращение, то есть адресный код совпадает с исполнительным адресом. При всей простоте использования способ имеет существенный недостаток – ограниченный размер адресного пространства, т.к. для адресации к памяти большой ёмкости нужно "длинное" адресное поле. Однако самым существенным недостатком можно считать то, что адрес, указанный в команде, не может быть изменён в процессе вычислений (во всяком случае, такое изменение не рекомендуется). Это ограничивает возможности по произвольному размещению программы в памяти.
Способ: косвенная адресация
Одним из путей преодоления проблем, свойственных прямой адресации, может служить прием, когда с помощью ограниченного адресного поля команды указывается адрес ячейки, в свою очередь, содержащей полноразрядный адрес операнда. Этот способ известен как косвенная адресация. Запись означает содержимое ячейки, адрес которой указан в скобках.
При косвенной адресации содержимое адресного поля команды остается неизменным, в то время как косвенный адрес в процессе выполнения программы можно изменять. Это позволяет проводить вычисления, когда адреса операндов заранее неизвестны и появляются лишь в процессе решения задачи. Дополнительно такой прием упрощает обработку массивов и списков, а также передачу параметров подпрограммам.
Недостатком косвенной адресации является необходимость в двукратном обращении к памяти: сначала для извлечения адреса операнда, а затем для обращения к операнду. Сверх того задействуется лишняя ячейка памяти для хранения исполнительного адреса операнда.
В качестве варианта косвенной адресации, правда, достаточно редко используемого, можно упомянуть многоуровневую или каскадную косвенную адресацию
когда к исполнительному адресу ведёт цепочка косвенных адресов. В этом случае один из битов в каждом адресе служит признаком косвенной адресации. Состояние бита указывает, является ли содержимое ячейки очередным адресом в цепочке адресов или это уже исполнительный адрес операнда. Особых преимуществ у такого подхода нет, но в некоторых специфических ситуациях он оказывается весьма удобным, например при обработке многомерных массивов. В то же время очевиден и его недостаток – для доступа к операнду требуется три и более обращений к памяти.
Дата: 2019-02-02, просмотров: 354.