...
.ENDMOD;
Директива INITДиректива INIT используется для инициализации переменных и буферов в ПЗУ. Редактор связей помещает данные инициализации в файл образа памяти, который затем используется разделителем программ (splitter) при подготовке данных для записи в ПЗУ. Разделитель трансформирует части этого файла в формат, совместимый с промышленным стандартом программатора ПЗУ.
Инициализирующие значения могут быть перечислены в директиве или указаны во внешнем файле. Директива INIT может иметь одну из следующих форм:
.INIT имя_буфера: значение1, значение2,...;
.INIT имя_буфера: ^другой_буфер или %другой_буфер,...;
.INIT имя_буфера: <имя_файла>;
Операторы ^ и % используются для инициализации буфера или переменной базовым адресом, или длиной, или даже другими буферами. Любые комбинации констант, указателей адресов буфера и величин длины буфера могут быть заданы через запятую. Примеры:
.INIT x: 0x3FFF;
Данный пример инициализирует переменную x шестнадцатеричной константой 0x3FFF.
.INIT buf: 9,0,3,5,7;
Эта директива инициализирует буфер buf списком констант.
.INIT ab: ^buf;
Здесь переменная ab инициализируется указателем стартового адреса буфера buf.
Допускается инициализировать только часть данных буфера, задавая смещение его базового адреса (индекса):
.INIT buf[2]: 3,5,7;
Так, инициализирующие величины будут размещены, начиная с элемента buf[2]. Здесь инициализируются второй, третий и четвертый элементы буфера buf величинами 3, 5 и 7 соответственно.
Третья форма директивы INIT указывает имя файла, который содержит инициализирующие величины. Ассемблер устанавливает указатель на этот файл, и данные присоединяются при запуске редактора связей. Следующий пример заставляет редактор связей инициализировать буфер sin содержимым файла sinus.dat:
.INIT sin: <sinus.dat>;
Если файл с данными находится в директории с программой, то необходимо указать в скобках только имя этого файла. Если файл находится в другом каталоге, необходимо указать путь к этому каталогу и имя файла. Например, если файл init.dat для буфера с именем buff размещен в директории C:\ADSP2181\PROG1\, тогда директива INIT должна быть применена следующим образом:
.INIT buff: <C:\ADSP2181\PROG1\init.dat>
Это позволит редактору связей найти файл. Данный способ широко используется для загрузки буферов данными, выработанными другими программами, такими, например, как нахождение коэффициентов фильтра.
После того как редактор связей считает и присоединит содержимое файла, изменение данных потребует лишь выполнить повторную компоновку программы.
Переменные данных и буферов могут быть инициализированы с помощью семиразрядного ASCII кода. Следующий пример инициализирует один четырехразмерный буфер input кодами ASCII для букв A, E, F, Z. ASCII коды размещаются в семи младших разрядах 16-разрядной памяти данных или 24-разрядной памяти программ. Символы необходимо заключать в апострофы.
.INIT input: 'AEFZ'; {Инициализировать буфер символами ASCII}
Специальный синтаксис директивы INIT24, позволяет сохранять 24-х разрядные данные в памяти программ. Это дает возможность получить доступ к младшим 8-и разрядам каждого 24-х разрядного слова памяти программ при инициализации буферов данных или переменных в исходной программе.
Например, эта директива позволяет вычислить 16-разрядный адрес для переменной var:
.INIT var: ^buff + 17;
А следующая директива вычисляет 24-разрядный адрес для этой же переменной:
.INIT24 var: ^buff + 17;
Директива GLOBALДиректива GLOBAL обеспечивает доступ к переменным, буферам и портам из других модулей программы. Для доступа к одной из этих структур из других модулей необходимо объявить ее директивой GLOBAL. Директива GLOBAL имеет формат:
.GLOBAL внутренний_символ 1, внутренний_символ 2,...;
Пример:
.VAR/PM/RAM buff[10]; {Создать буфер buff размерностью
10 элементов}
.GLOBAL buff; {Объявить буфер видимым из других модулей}
После того как структура объявлена глобальной, другие модули могут обращаться к ней в программе. Предварительно эта структура в них должна быть объявлена как внешняя с помощью директивы EXTERNAL.
Директива ENTRYДиректива ENTRY позволяет обращаться к программным меткам в других модулях. Это позволяет использовать метку для вызова подпрограммы или межмодульных переходов. Директива ENTRY имеет формат:
.ENTRY метка 1, метка 2, ...;
Пример:
.ENTRY met; {Делает метку met доступной из других модулей}
С тех пор как метка объявлена директивой ENTRY, другие модули могут обращаться к ней, идентифицируя ее как внешнюю с помощью директивы EXTERNAL.
Директива EXTERNALДиректива EXTERNAL позволяет программному модулю обращаться к глобальным структурам данных (переменным, буферам и портам) и программным меткам, объявленным в других модулях.