Лабораторная 4: Программирование цикла с переадресацией

При решении задач, связанных с обработкой массивов, возникает необходимость изменения исполнительного адреса при повторном выполнении некоторых команд. Эта задача может быть решена путем использования косвенной адресации.

Пример З

Разработать программу вычисления суммы элементов массива чисел С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.

Рис. 2. Граф-схема алгоритма для примера 3
Рис. 2. Граф-схема алгоритма для примера 3

Таблица 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. Написать программу определения заданной характеристики последовательности чисел С1 , С2, …, Сп . Варианты заданий приведены в табл. 9.8.Записать программу в мнемокодах, введя ее в поле окна Текст программы.
  2. Сохранить набранную программу в виде текстового файла и произвести ассемблирование мнемокодов.
  3. Загрузить в ОЗУ необходимые константы и исходные данные.
  4. Отладить программу.
Номер варианта Характеристика последовательности чисел С1, С2 ,.. ,Cn
1 Количество четных чисел
2 Номер минимального числа
3 Произведение всех чисел
4 Номер первого отрицательного числа
5 Количество чисел, равных С1
6 Количество отрицательных чисел
7 Максимальное отрицательное число
8 Номep первого положительною числа
9 Минимальное положительное число
10 Номер максимального числа
11 Количество нечетных чисел
12 Количество чисел, меньших C1
13 Разность сумм четных и нечетных элементов массивов
14 Отношение сумм четных и нечетных элементов массивов

Примечание. Под четными (нечетными) элементами массивов понимаются элементы массивов, имеющие четные (нечетные) индексы. Четные числа элементы массивов, делящиеся без остатка на 2.

Содержание отчета

  1. Формулировка варианта задания.
  2. Граф-схема алгоритма решения задачи.
  3. Распределение памяти (размещение в ОЗУ переменных, программы и необходимых констант).
  4. Программа.
  5. Значения исходных данных и результата выполнения программы.

Контрольные вопросы

  1. Как организовать цикл в программе?
  2. Что такое параметр цикла?
  3. Как поведет себя программа, приведенная в табл. 7, если в ней будет отсутствовать команда wr 31 по адресу 014?
  4. Как поведет себя программа, приведенная в табл. 7, если метка m1 будет
    поставлена по адресу 005? 007?