.PMSEG имя_сегмента_pm;
.DMSEG имя_сегмента_dm;
Обычно, чтобы расположить все программы и данные исходного модуля в определенном системным конфигуратором сегменте памяти, необходимо повторить параметр SEG в директиве MODULE и всех директивах VAR внутри модуля. Директивы PMSEG и DMSEG используются для исключения многократного повторения параметров SEG. Директивы PMSEG и DMSEG должны быть размещены в исходном файле программного модуля перед директивой MODULE. Ниже приводится пример, в котором модуль prog1, некоторые буферы и переменную var1 располагают в памяти данных в сегменте с именем seg1:
.DMSEG seg1;
.MODULE/RAM prog1;
.VAR/DM/RAМ/СIRС buf1[15];
.VAR/DM/RAM buf2[5];
.VAR/DM/RAM buf3[5];
.VAR/DM/RAM var1;
...
.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: ;
Если файл с данными находится в директории с программой, то необходимо указать в скобках только имя этого файла. Если файл находится в другом каталоге, необходимо указать путь к этому каталогу и имя файла. Например, если файл init.dat для буфера с именем buff размещен в директории C:\ADSP2181\PROG1\, тогда директива INIT должна быть применена следующим образом:
.INIT buff:
Это позволит редактору связей найти файл. Данный способ широко используется для загрузки буферов данными, выработанными другими программами, такими, например, как нахождение коэффициентов фильтра.
После того как редактор связей считает и присоединит содержимое файла, изменение данных потребует лишь выполнить повторную компоновку программы.
Переменные данных и буферов могут быть инициализированы с помощью семиразрядного 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 имеет формат:
Читать дальше