Выполнение операции сопровождается изменением адреса команды на очередной. Для упрощения последующего программирования переходов целесообразно из двух альтернативных условий выбирать такое, чтобы при "да" возникал переход по ветви, не содержащей операций, а при "нет" возникал переход к очередной команде. С использованием символических обозначений признаков (кодов условий) внутри графических элементов разветвлений спешить не следует. Пока лучше придерживаться физических обозначений.
Если после разветвления операции присутствуют в обеих ветвях алгоритма, то возникает задача объединения ветвей. Пример её решения приведен на рисунке 7.3. Смысл в том, что ветвь по “да”, чтобы не оказаться пропущенной, выделяется метками и размещается после ветви по “нет”. Для воссоединения ветвей в точке UN: необходимо ввести команду безусловного перехода JUMP к метке UN, расположенной в точке объединения в конце ветви по “да”. Инструкции в программе должны расположиться последовательно – сначала ветвь по “нет”, потом ветвь по “да”.
Рисунок 7.3 — Объединение Рисунок 7.4 — Обращение к ветвей подпрограмме
С учётом существования в системе команд ADSP-21xx условных операций подходы к построению алгоритмов if …then/else в ЦСП могут претерпеть некоторые изменения. Например, можно образовать как бы две ветви, расположив последовательно две альтернативных условных операции. Если при выполнении первой из операций признак может измениться, то может потребоваться операция PASS для его восстановления.
7.2.3. Неоднократно встречающаяся в алгоритме одинаковая комбинация из нескольких операций может быть оформлена как подпрограмма. Это сэкономит место, занимаемое программой в памяти. В виде подпрограмм часто используют готовые или ранее разработанные фрагменты программы. Место входа в подпрограмму обозначается меткой, а возврат в основную программу обеспечивается инструкцией RTS, которая располагается в конце подпрограммы. Подпрограмма располагается вне текста программы модуля. Для обращения к подпрограмме используется инструкция CALL <метка>. На рис. 7.4 изображен пример обращения к подпрограмме. Стрелки поясняют взаимодействие элементов алгоритма. Крупная подпрограмма обычно детализируется отдельно от основной программы и располагается в другом модуле. Подробности см. в п. 8.2.
Такие свойства процессора, что каждая из обрабатываемых величин сохраняется в каком-то регистре и имеется достаточная свобода в порядке использования регистров, позволяют реорганизовать первоначальный алгоритм … и добиться сокращения числа операций:
Внешний бесконечный цикл с частотой манипуляции FT.
READ(X); {Ввод информационного символа из порта}
Y := X shl (k-1); {Преобразование для получения модуляции по таблице 5.1}
A := A + Y; {Y обеспечивает фазовую модуляцию}
Внутренний цикл с частотой дискретизации fД..
Q := M(A); {чтение отсчёта из ячейки памяти с адресом }
A := A + N; {формирование очередного адреса }
WRITE(Q); {вывод отсчёта генерируемого колебания в порт }
Благодаря использованию свойств генератора адресов DAG (кольцевой буфер) и устройства сдвига (барабанный тип) разукрупнять операции не потребовалось. Исходные величины k и N задаются до входа в циклы.
Итогом проведенной работы является детализированный графический алгоритм в физических обозначениях величин, в котором на выполнение каждого элемента алгоритма затрачивается одна команда. Фрагменты графического алгоритма приведены на рис. 7.5. Первый фрагмент выполняется во внешнем цикле, второй – во внутреннем цикле. В данном случае число команд не возросло, а сократилось.
Рисунок 7.5 — Детализированный алгоритм в физических обозначениях
Физические обозначения величин, использованные в алгоритме, и комментарий, содержащий операции исходного алгоритма, позволяют проследить за правильностью физического содержания алгоритма после проведенной детализации.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.