При решении задач, связанных с обработкой массивов, возникает необходимость изменения исполнительного адреса при повторном выполнении некоторых команд. Эта задача может быть решена путем использования косвенной адресации.
Пример З
Разработать программу вычисления суммы элементов массива чисел С1, С2 ,…, Сп. Исходными данными в этой задаче являются: п — количество суммируемых чисел и С1, С2 ,…, Сп — массив суммируемых чисел. Заметим, что должно выполняться условие п > 1, т. к. алгоритм предусматривает, по крайней мере, одно суммирование. Кроме того, предполагается, что суммируемые числа записаны в ОЗУ подряд, т. е. в ячейки памяти с последовательными адресами. Результатом является сумма S.
Составим программу для вычисления суммы со следующими конкретными параметрами: число элементов массива — 10, элементы массива расположены в ячейках ОЗУ по адресам 040, 041, 042,…, 049. Используемые для решения задачи промежуточные переменные имеют следующий смысл: Ai — адрес числа Сi, i е {l, 2,…, 10}; ОЗУ( Ai) — число по адресу Ai ,S — текущая сумма; к — счетчик цикла, определяющий число повторений тела цикла.
Распределение памяти таково. Программу разместим в ячейках ОЗУ, начиная с адреса 000, примерная оценка объема программы — 20 команд; промежуточные переменные: Аi , — в ячейке ОЗУ с адресом 030, к — по адресу 031, S — по адресу 032. ГСА программы показана на рис. 2, текст программы с комментариями приведен в табл. 7.

Таблица 7. Текст программы примера 3
Адрес | Команда | Примечание |
000 | RD #40 | Загрузка начального адреса массива 040 |
001 | WR 30 | в ячейку 030 |
002 | RD #10 | Загрузка параметра цикла k = 10 в ячейку 031 |
003 | WR 31 | |
004 | RD #0 | Загрузка начального значения суммы 5 = 0 |
005 | WR 32 | в ячейку 032 |
006 | M1: RD 32 | Добавление |
007 | ADD @30 | к текущей сумме |
008 | WR 32 | очередного элемента массива |
009 | RD30 | Модификация текущего |
010 | ADD #1 | адреса массива |
011 | WR 30 | (переход к следующему адресу) |
012 | RD 31 | Уменьшение счетчика |
013 | SUB #1 | (параметра цикла) |
014 | WR 31 | на 1 |
015 | JNZ Ml | Проверка параметра цикла и переход при k не равен 0 |
016 | RD 32 | Вывод |
017 | OUT | результата |
018 | HLT | Стоп |
Задание 3
- Написать программу определения заданной характеристики последовательности чисел С1 , С2, …, Сп . Варианты заданий приведены в табл. 9.8.Записать программу в мнемокодах, введя ее в поле окна Текст программы.
- Сохранить набранную программу в виде текстового файла и произвести ассемблирование мнемокодов.
- Загрузить в ОЗУ необходимые константы и исходные данные.
- Отладить программу.
Номер варианта | Характеристика последовательности чисел С1, С2 ,.. | ,Cn |
1 | Количество четных чисел | |
2 | Номер минимального числа | |
3 | Произведение всех чисел | |
4 | Номер первого отрицательного числа | |
5 | Количество чисел, равных С1 | |
6 | Количество отрицательных чисел | |
7 | Максимальное отрицательное число | |
8 | Номep первого положительною числа | |
9 | Минимальное положительное число | |
10 | Номер максимального числа | |
11 | Количество нечетных чисел | |
12 | Количество чисел, меньших C1 | |
13 | Разность сумм четных и нечетных элементов массивов | |
14 | Отношение сумм четных и нечетных элементов массивов |
Примечание. Под четными (нечетными) элементами массивов понимаются элементы массивов, имеющие четные (нечетные) индексы. Четные числа элементы массивов, делящиеся без остатка на 2.
Содержание отчета
- Формулировка варианта задания.
- Граф-схема алгоритма решения задачи.
- Распределение памяти (размещение в ОЗУ переменных, программы и необходимых констант).
- Программа.
- Значения исходных данных и результата выполнения программы.
Контрольные вопросы
- Как организовать цикл в программе?
- Что такое параметр цикла?
- Как поведет себя программа, приведенная в табл. 7, если в ней будет отсутствовать команда wr 31 по адресу 014?
- Как поведет себя программа, приведенная в табл. 7, если метка m1 будет
поставлена по адресу 005? 007?