Предыдущая Следующая

соответствии с предьщущими командами размещения, дубликатных сегментов или объектов, помещенных в абсолютные адреса во входных полях.

Например, если имеются два сегмента данных (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 ? | ПРОГРАММАТОР | ПРОЕКТЫ | СТАТЬИ | ССЫЛКИ | КАРТА САЙТА
Hosted by uCoz