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

При косвенной адресации используется адрес адреса операнда, что предпочтительнее, чем собственно адрес как часть команды. Одноадресная команда ADD @ 100 (знак @ указывает на косвенную адресацию) заставляет ЦП сложить содержимое аккумулятора с содержимым ячейки памяти, адресуемой ячейкой памяти 100, т. е. (А) = (А) + ( (100)) (двойные скобки указывают на содержимое содержимого). По адресу, который является частью команды, содержится тоже адрес. Если, например, ячейка памяти 100 содержит 227, то команда ADD @ 100 аналогична команде ADD227. На рис. 3.6 показана последовательность команд, которая использует косвенную адресацию для сложения двух чисел и запоминания результата. Эта последовательность более сложна и требует больше времени для исполнения,чем последовательность на рис. 3.3. Однако она позволяет производить обращение к любой части памяти, а программа может простыми средствами изменять содержимое ячейки ОЗУ, которая содержит действительный адрес данных.

Косвенная адресация медленнее прямой. По сравнению с прямой адресацией ЦП должен выполнить дополнительное обращение к памяти. Ему необходимо сначала выбрать из памяти команду, содержащую косвенный адрес, затем использовать косвенный адрес для получения исполнительного адреса и только потом использовать его для обработки данных. Большинство программистов считают косвенную адресацию сложной и ведущей к ошибкам. Однако, несмотря на кажущуюся сложность, косвенная адресация является более гибкой, чем прямая. Например, программа может занести результат операции в память для его дальнейшего использования по команде ЗАПОМНИТЬ РЕЗУЛЬТАТ (STORE @ = RESULT).

Прежде чем запомнить последующий результат, к содержимому ячейки ОЗУ с символическим адресом RESULT добавляется 1. По той же самой команде можно занести очередной результат в следующую ячейку памяти. Очевидно, что при прямой адресации каждый раз требуется отдельная кохманда. Косвенная адресация особенно удобна для подпрограмм, так канона позволяет одной и той же подпрограмме обрабатывать данные из различных массивов памяти. На рис. 3.7 приведены два варианта подпрограммы» определяющей „наибольший элемент в массиве. Если используется прямая адресация, как показано на рис. 3.7,а, то необходимо разместить исходные данные массива в определенных ячейках памяти. Если используется косвенная адресация, как это показано на рис. 3.7,6, то необходимо только поместить начальный адрес массива данных в ячейках памяти (100) для косвенного адреса