соответствии с предьщущими командами размещения, дубликатных сегментов или объектов, помещенных в абсолютные адреса во входных полях.
Например, если имеются два сегмента данных (Zl, Z2), которые должны быть размещены в нулевой странице памяти (О-FFh), и три сегмента (Al, А2, A3), которые могут быть размещены где-либо в доступной оперативной памяти, то это может быть сделано с помощью следующих команд:
-Z(DATA)Z1,Z2=0-FF
-Z(DATA) Al, А2, A3=0-1FFF
Первая команда разместит сегменты Z1 и Z2, начиная с нулевого адреса, и выдаст сообщение об ошибке, если они не помещаются в указанный диапазон. Затем будут размещены сегменты Al, А2, и A3, начиная с первого не используемого сегментами Z1 и Z2 адреса.
Команды с опцией -Р (в отличие от команд с опцией -Z) не обязательно размещают сегменты (или части сегментов) последовательно, а используют для этого свободные области между сегментами, размещенными ранее. По этой причине, опцию -Z следует использовать в случаях, когда необходимо разместить сегменты в определенном порядке. Такая необходимость может возникнуть, когда требуется сохранить переменные и их инициализирующие значения в одинаковом порядке и в одном блоке.
29.5.2. Переадресация
Для некоторых выходных форматов, компоновщик XLINK может произвести переадресацию на выходе логических адресов к физическим. Логические адреса — это адреса, указанные в программе. Они используются во всех опциях командной строки XLINK. Обычно эти адреса используются также в выходных объектных файлах, однако путем использования опции -М можно задать в выходном объектном файле отображение логического адреса на физический адрес.
29.5.3. Типы распределения сегментов
В Табл. 29.1 перечислены различные типы сегментов, которые могут быть обработаны компоновщиком XLINK. Под обработкой понимается распределение размера сегмента (выделение для него адресного пространства заданного размера).
Таблица 29.1. Типы сегментов
Тип сегмента |
Описание |
STACK (Стек) |
По умолчанию распределяется от старших к младшим адресам. Выровненный размер сегмента вычитается из адреса загрузки до того, как ниже размещается предыдущий сегмент |
RELATIVE (Относительный) |
По умолчанию распределяется от младших к старшим адресам |
COMMON (Общий) |
Все части сегмента расположены по одному и тому же адресу |
Если в определениях сегментов сегменты стека «смешаны» с относительными или общими сегментами, компоновщик выдаст предупредительное сообщение. Однако распределены эти сегменты будут согласно распределению, заданному по умолчанию первым сегментом в списке.
Общие сегменты имеют размер, равный наибольшему размеру, объявленному для какого-либо частного общего сегмента. Например, если в модуле А объявлен общий сегмент COMSEG с размером 4, а в модуле В он же объявлен с размером 5, то этот последний размер и будет распределен для общего сегмента.
НА ГЛАВНУЮ | | ЧТО ТАКОЕ PIC ? | | ПРОГРАММАТОР | | ПРОЕКТЫ | | СТАТЬИ | | ССЫЛКИ | | КАРТА САЙТА |