Проектирование устройств на сигнальных процессорах: Учебное пособие (Проектирование цифровых устройств аппаратуры связи на ЦСП семейства ADSP-21xx), страница 20

Отдельные элементы алгоритма необходимо снабдить метками, которые на данном этапе заменяют адреса. Назначение конкретных адресов произойдёт при работе компоновщика. Меткой называется символическое обозначение адреса ячейки памяти, в которой расположена помечаемая команда. Метка выделяется двоеточием. Метки следует расставить в точках объединения ветвей и возле элементов алгоритма, переход к которым происходит при безусловных переходах и по "да" условных переходов. Имена меток целесообразно выбирать с физическим содержанием. Например, LOOP- петля, CYCLE - цикл, BEGIN-начало, MINUS - ветвь для отрицательных значений и т. п. Возможны буквенно-цифровые метки, например L7: от слова label - ярлык.

Пример оформления детализированного графического алгоритма, выраженного через символические обозначения операций над регистрами и коды условий, изображён на рисунке 7.8.  Он соответствует ранее полученному алгоритму рисунка 7.5. Справа в поле комментария будут проставляться команды на языке ассемблера, выбор которых рассматривается ниже в п. 8.1.

 


Рисунок 7.8 — Алгоритм, выраженный через символические обозначения

Высокая наглядность полученного алгоритма позволяет легко проследить правильность ранее выполненного назначения регистров. При обнаружении недостаточно тщательной детализации придётся вернуться к предыдущим этапам разработки. Полученный алгоритм явится удобной основой для завершения разработки программного обеспечения ЦУ.

8. СОСТАВЛЕНИЕ ПРОГРАММЫ НА ЯЗЫКЕ АССЕМБЛЕРА

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

Из существующих форм записи программ весьма удобной является запись на языке ассемблера. Будучи машинно-ориентированным (одна строка соответствует одной команде) и осмысленным, он позволяет проследить за содержанием процесса обработки в процессоре, что предотвращает  ошибки в программе. Программирование на ассемблере ведёт к созданию более быстро работающих и более компактных программ, чем программирование на языке высокого уровня.

Остановимся на общей структуре программ. Любая программа на языке Ассемблера для сигнального процессора ADSP-21xx содержит команды (инструкции) Ассемблера, директивы Ассемблера и команды препроцессора.

Синтаксис инструкций Ассемблера совпадает с синтаксисом системы команд. Каждая инструкция начинается ключевым словом и заканчивается символом “;”. Каждая директива начинается с символа “.” и заканчивается символом “;”. Команда препроцессора начинается с символа “#” и заканчивается символом возврата каретки.

Директива .VAR объявляет и может инициализировать переменные и массивы данных.

Программа состоит из одной секции памяти данных и двух секций памяти программы. Директива .section определяет начало секции. Ключевые слова /pm (или /code)  и /dm (или /data) определяют тип памяти процессора для отображения данной секции программы. Следующее за ключом типа слово (data1, interrupts, program) представляет собой имя секции, которое используется в файле распределения памяти .ldf.  Первая секция памяти программы (interrupts) содержит таблицу векторов прерываний. Нулевой вектор, возникающий при сбросе процессора, содержит команду перехода к метке start в начало второй секции памяти программы (program), которая содержит рабочую часть кода.       

Для каждого процессора (и компьютера на его основе) имеется свой ассемблер. Ассемблер семейства ADSP-21xx отличается применением алгебраического стиля. Это делает его похожим на язык высокого уровня и облегчает освоение. Система команд семейства процессоров ADSP-21xx приведена в Приложении B. Пояснения по применению языка ассемблер будут даны по ходу изложения п. 8.1.

8.1 Выбор инструкций