При решении задач, связанных с обработкой массивов, возникает необходимость изменения исполнительного адреса при повторном выполнении некоторых команд. Эта задача может быть решена путем использования косвенной адресации и модификации содержимого ячейки ОП с косвенным адресом.
Необходимость косвенной адресации в арифметических и посылочных командах исключает возможность использования в программе относительной адресации для создания перемещаемой области данных. В таких случаях имеет смысл разрабатывать перемещаемую программу.
Для получения перемещаемой программы необходимо использовать относительную адресацию в командах передачи управления. Это обеспечит возможность расположения программы в произвольной области ОП. Настройка программы по месту расположения осуществляется заданием базового адреса. Приведенный далее пример иллюстрирует разработку перемещаемой программы.
Пример 2.7. Разработка программы вычисления суммы чисел С1, С2,…, СN.
Граф-схема алгоритма решения задачи показана на рис. 2.2.
Исходными данными в этой задаче являются N – количество суммируемых чисел и С1, С2,…, СN – суммируемые числа. Заметим, что должно выполняться условие N ≥1, т.к, алгоритм предусматривает по крайней мере одно суммирование. Кроме того, предполагается, что суммируемые числа записаны в ОП подряд. Результатом является сумма S. Используемые для решения задачи промежуточные переменные имеют следующий смысл: A1 – адрес C1, Ai – адрес Ci, AN+1 – увеличенный на единицу адрес CN.

Ø
Рис. 2.2. Граф-схема решения задачи
Таблица 2.7
Программа с действительными адресами операндов и относительными адресами переходов
| Относительный адрес | Символическая команда | Код команды | Комментарий | ||
| КОП | ТА | А | |||
| ВВ | - | - | АК:=N | ||
| ЗП | П | ОП [00]:=N | |||
| ЧТ | Н | АК:= 0 | |||
| ЗП | П | S:= 0 | |||
| ЧТ | П | АК:=А1 | |||
| ЗП | П | Аi:=A1 | |||
| СЛ | П | АК:=А1+ N | |||
| ЗП | П | АN+1:=A1+N | |||
| ЧТ | П | АК:=S | |||
| СЛ | К | АК:=S+ОП [Ai] | |||
| ЗП | П | S:=S+ОП [Ai] | |||
| ЧТ | П | АК:=Аi | |||
| СЛ | Н | АК:=Аi+1 | |||
| ЗП | П | Аi:= Аi+1 | |||
| ВЫЧ | П | АК:=Аi-AN+1 | |||
| УПЗН | О | Перейти по адресу РБА+08, если Ai<AN+1 | |||
| ЧТ | П | АК:=S | |||
| ВЫВ | - | - | РВЫВ:=S | ||
| ОСТ | - | - | ОСТАНОВ |
В процессе разработки программы для переменных N, S, А1, Ai, AN+1 выделены ячейки ОП с адресами соответственно 00, 01, 02, 03, 04. Программа может быть размещена в ОП начиная с ячейки 05. Базовый адрес в этом случае должен быть равен 05. Суммируемые числа могут быть записаны в ОП начиная с ячейки 24. В этом случае в ячейку 02 должна быть записана константа 00024.
ЗАДАНИЕ
1. Разработать перемещаемую программу определения заданной характеристики последовательности чисел С1, С2, …, СN. Варианты заданий приведены в табл. 2.8.
2. Записать программу, необходимые константы и исходные данные в ОП ЭВМ.
3. Отладить программу.
Таблица 2.8
Варианты задания
| № Варианта | Характеристика последовательности чисел С1, С2, …, СN |
| Количество положительных чисел | |
| Номер минимального числа | |
| Произведение всех чисел | |
| Номер первого отрицательного числа | |
| Количество чисел, равных С1 | |
| Количество отрицательных чисел | |
| Максимальное число | |
| Номер первого положительного числа | |
| Минимальное число | |
| Номер максимального числа | |
| Количество нулей | |
| Количество чисел, меньших С1 |
Содержание отчета
1. Формулировка варианта задания (см. п.1 «Задания», таб. 2.8).
2. Граф-схема алгоритма решения задачи.
3. Программа.
4. Размещение в ОП переменных, программы и необходимых констант, значение базового адреса.
5. Значения исходных данных и результата выполнения программы.






