При решении задач, связанных с обработкой массивов, возникает необходимость изменения исполнительного адреса при повторном выполнении некоторых команд. Эта задача может быть решена путем использования косвенной адресации и модификации содержимого ячейки ОП с косвенным адресом.
Необходимость косвенной адресации в арифметических и посылочных командах исключает возможность использования в программе относительной адресации для создания перемещаемой области данных. В таких случаях имеет смысл разрабатывать перемещаемую программу.
Для получения перемещаемой программы необходимо использовать относительную адресацию в командах передачи управления. Это обеспечит возможность расположения программы в произвольной области ОП. Настройка программы по месту расположения осуществляется заданием базового адреса. Приведенный далее пример иллюстрирует разработку перемещаемой программы.
Пример 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. Значения исходных данных и результата выполнения программы.