При решении задач, связанных с обработкой массивов, возникает необходимость изменения исполнительного адреса при повторном выполнении некоторых команд. Эта задача может быть решена путем использования косвенной адресации.  
## Пример
Разработать программу вычисления суммы элементов массива чисел $C_1 ,C_2 , ..., C_n$. Исходными данными в этой задаче являются: $n$ - количество суммируемых чисел и $C_1, C_2, ..., C_n$ - массив суммируемых чисел. Заметим, что должно выполняться условие n > 1, т. к. алгоритм предусматривает, по крайней мере, одно суммирование. Кроме того, предполагается, что суммируемые числа записаны в ОЗУ подряд, т. е. в ячейки памяти с последовательными адресами. Результатом является сумма $S$.  
![Граф-схема алгоритма для примера](../../Pictures/ЛБ05_01.%20Граф-схема%20алгоритма%20для%20примера.png)  

Составим программу для вычисления суммы со следующими конкретными параметрами: число элементов массива - 10, элементы массива расположены в ячейках ОЗУ по адресам 040, 041, 042, ..., 049. Используемые для решения задачи промежуточные переменные имеют следующий смысл: $A_i$ - адрес числа $C_i , i(1, 2, ...,10)$; ОЗУ($A_i$) - число по адресу $Ai$, $S$ - текущая сумма; $k$ - счетчик цикла, определяющий число повторений тела цикла.  
Распределение памяти таково. Программу разместим в ячейках ОЗУ, начиная с адреса 000, примерная оценка объема программы - 20 команд; промежуточные переменные: $A_i$ - в ячейке ОЗУ с адресом 030, $k$ - по адресу 031, $S$ - по адресу 032. 

| Адрес | Команда     | Примечание                                     |
| ----- | ----------- | ---------------------------------------------- |
| 000   | `RD #40`    | Загрузка начального адреса массива 040         |
| 001   | `WR 30`     | в ячейку 030                                   |
| 002   | `RD #10`    | Загрузка параметра цикла $k$ = 10 в ячейку 031 |
| 003   | `WR 31`     |                                                |
| 004   | `RD #0`     | Загрузка начального значения суммы $S$ = 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 M1`    | Проверка параметра цикла и переход при $k$ ≠ 0 |
| 016   | `RD 32`     | Вывод                                          |
| 017   | `OUT`       | результата                                     |
| 018   | `HLT`       | Стоп                                           |
## Задание
1. Написать программу определения заданной характеристики последовательности чисел $C_1, C_2, ..., C_n$.
2. Записать программу в мнемокодах, введя ее в поле окна Текст программы.
3. Сохранить набранную программу в виде текстового файла и произвести ассемблирование мнемокодов.
4. Загрузить в ОЗУ необходимые константы и исходные данные.
5. Отладить программу.
#### Вариант
| Номер варианта | Характеристика последовательности чисел $C_1, C_2, ..., C_n$ |
| -------------- | ------------------------------------------------------------ |
| 12             | Количество чисел, меньших $C_1$                              |