Запись подпрограммы начинают с записи директив. После этого одну за другой выписывают команды, выбранные в п. 8.1. Важно отметить, что порядок следования команд жестко определяется выбранными инструкциями переходов и может не совпадать с порядком их расположения на схеме алгоритма. Для получения правильного порядка следования команд следует в случае разветвления пойти по ветви “нет”, а по её окончании учесть размещение команд с метками, обсуждённое в п. 7.2.2.
Пример подпрограммы на языке ассемблера для процессора ADSP-21xx, полученной для алгоритма рисунка ??, приведен в таблице ?? В качестве комментария используют или выражения на языке высокого уровня, или физические пояснения. Если заданная функция реализуется небольшим числом инструкций, то можно не оформлять её как подпрограмму и, включить эти инструкции в головную программу.
Программа обычно состоит из нескольких модулей. Каждый модуль обеспечивает выполнение законченной функции, то есть является подпрограммой. Взаимодействие модулей обеспечивается особыми директивами и инструкциями ассемблера:
В подпрограмме:
/* имя файла, тип процессора, имя подпрограммы, комментарий */
.GLOBAL label; // объявление метки для входа в подпрограмму
label: // метка label указывает место входа в подпрограмму
/*………………………….. инструкции подпрограммы */
RTS; // последняя инструкция - возврат к вызвавшей программе
// конец модуля
В основной программе:
/* имя файла, тип процессора, имя программы, комментарий */
.EXTERN label, … ; // описание метки входа во внешнюю подпрограмму
JUMP start; NOP; NOP; NOP; // таблица векторов прерывания …
/*…………………………………….*/
start: // метка start указывает вход в основную программу
/*……………… подготовка исходных данных для подпрограммы */
CALL label; // вызов подпрограммы, начинающейся с метки label
/*…………………использование результатов работы подпрограммы */
// конец основной программы
В файле обычно содержится только один модуль. Модули программы транслируются по отдельности. Объединение их происходит при компоновке.
Подпрограмма обычно представляет собой законченный программный продукт и её должен сопровождать комментарий со сведениями, которые помогут правильному её использованию. Содержание такого комментария являетсярезультатом осмысления взаимодействия модулей программы:
/*
· Передаваемые параметры, то есть местонахождение исходных операндов.
· Параметры вызова, то есть значения регистров, которые должна обеспечить вызывающая программа перед вызовом.
· Возвращаемые параметры, то есть где находятся результаты работы подпрограммы.
· Изменяемые, то есть используемые в подпрограмме регистры. (В вызывающей программе могут потребоваться меры для сохранения и восстановления этих регистров)
· Изменяемая подпрограммой память.
· Время исполнения подпрограммы (число затрачиваемых циклов).
*/
Комментарий выделяется символами /*…*/ и помещается перед текстом подпрограммы. Примеры оформления подпрограмм можно найти в [ЦСП, Методуказания к лаб. работам, Приложение, программы к ЛР №5 и №7].
В связи с тем, что в проекте разработана только часть программного обеспечения устройства, можно рассчитать затраты времени на выполнение разработанного фрагмента программы. Первым делом подсчитывают число команд в разработанной подпрограмме. Если внутри разработанного фрагмента имеется свой цикл, то число команд в цикле нужно умножить на число проходов по циклу. Время выполнения tвп можно рассчитать как число команд, умноженное на время цикла процессора tц = 1/fп.
Подпрограмма, расположенная до входа в цикл, выполняется один раз при включении питания устройства. Время её выполнения обычно некритично.
Программа обработки (будь то передатчик или приёмник) имеет два цикла, внутренний, выполняемой с частотой дискретизации fд, и внешний, выполняемый с тактовой частотой FТ. Соотношение частот k=fд/Fт.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.