|
|
-Z[(<тип>)]<сегмент(ы)>
Определяет сегменты.
Синтаксис этой опции:
-Z[(<тип)>]<список сегментов>[<тип размещения>][список диапазонов]
(<тип>) необязателен (см.3.5).
В <списке сегментов> имена сегментов разделяются запятыми. Сегменты размещаются
в порядке их следования в списке. Присоединение "+nn" к имени сегмента вызывает
увеличение отведенной под него памяти на nn байт. Например, "CODE+100" увеличит
отведенную под сегмент CODE память на 100 байт (шестнадцатиричное).
<тип размещения> необязателен, и может быть "=" или "#".
"=" размещает сегменты, начиная с начальных адресов в диапазонах,
"#" размещает сегменты, заканчивая конечными адресами в диапазонах.
Диапазон не обязателен и определяет адреса, в которых будут размещаться
сегменты. В списке диапазонов указываются одиночные адреса или диапазоны
(число-число), разделенные запятыми. Короткий пример:
-Z(UNTYPED) SEGA, SEGB=100-200, 400-700, 1000
SEGA и SEGB - сегменты типа UNTYPED. SEGA будет размещен между адресами 100 и
200, если поместится или в адресах 400 - 700. Если SEGA не помещается ни в один
из этих диапазонов, он будет размещен с адреса 1000. SEGB будет размещен по тем
же правилам, но обязательно после SEGA (в более старших адресах). См.3.5.
-r[<символ>]
Поместить в выходной файл отладочную информацию. Подробнее см. описание
отладчика. Указание ключа -r подавляет указанный опцией -F формат выходного
файла.
-e<символ 1>=<символ 2>,<символ 3>,...
Заменяет внешние символические имена. Все символы с именами <символ 2>,
<символ 3>... переименовываются в <символ 1>. Очень полезно для целей
конфигурации, так как позволяет перенаправить вызов одной функции на другую
функцию, а также для отладки программ, так как ссылки к неопределенным еще
функциям можно перенаправить к какой-либо одной "пустой" функции.
Параметр
-e smallprintf = printf
заменит вызовы printf вызовами smallprintf.
3.5. Определение сегментов
Полный синтаксис ключа -Z:
-Z<(тип)> <список сегментов> - размещение по первому
сегменту
-Z<(тип)> <список сегментов>=<определение памяти> - размещение в младших
адресах
-Z<(тип)> <список сегментов> = <определение памяти> - размещение в старших
адресах
<(тип)> указывает тип всех сегментов, определяемых данным ключом -Z.
Тип может быть следующим:
CODE - коды программы (ПЗУ)
DATA - данные
UNTYPED - используется по умолчанию, если (<тип>) не указан
XDATA - данные во внешнем ОЗУ
IDATA - данные во встроенном ОЗУ
BIT - битовые данные
<список сегментов> имеет следующий синтаксис:
<сегмент> <+приращение>, <сегмент> <+приращение>,...
Заметим, что порядок перечисления сегментов в списке определяет порядок их
загрузки.
<Приращение> (необязательное) определяет количество байт, дополнительно
присоединяемое к концу сегмента (по умолчанию значение шестнадцатиричное).
<определение памяти> или список диапазонов - это набор диапазонов и/или
начальных адресов, в которых размещаются сегменты.
Диапазон определяется как
<начальный адрес>-<конечный адрес>
Примеры:
размещение в младших адресах:
-ZSEGA,SEGB+10,SEGC+10=10-50,60
Увеличить размер сегментов SEGB и SEGC на 10h байт каждый. Если SEGA поместится
в память с адреса 10h по адрес 50h, он будет размещен в этой области, иначе он
будет размещен с адреса 60h. Затем линкер пытается разместить сегменты SEGB и
SEGC, начиная с SEGB. Когда размещение завершено, сегменты будут расположены в
таком порядке: SEGA, затем SEGB, и в самых старших адресах - SEGC.
Размещение в старших адресах:
-ZSEGA, SEGB, SEGC#10-50,90
SEGA, если уместится, будет размещен в диапазоне 10h - 50h, заканчивая
адресом 50h. Если не уместится, SEGA будет заканчиваться адресом 90h. Затем
будут размещены SEGB и SEGC, причем SEGB размещается перед SEGA (в более младших
адресах), а SEGC - перед SEGB.
Если диапазон адресов слишком мал, генерируется ошибка "сегмент <сегмент>
перекрывает сегмент <сегмент>".
SEGA будет размещен в более старших адресах, чем SEGB, а SEGB - в более
старших адресах, чем SEGC.
Приоритетное размещение:
-ZSEGA,SEGB+10,SEGC+10
-ZSEGB,SEGD=1000
Увеличить SEGB и SEGC на 10h. Сначала разместить SEGA, затем SEGB и SEGD,
начиная с адреса 1000h. Затем, в самых старших адресах, разместить SEGC.
E-mail: info@telesys.ru