русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Особенности работы LINK


Дата добавления: 2015-06-12; просмотров: 571; Нарушение авторских прав


LINK создает исполнительный файл путем конкатенации кода программы и сегментов данных, соответствующих корректным инструкциям исходного текста. Эта сцепленная форма сегментов и является тем «исполнительным представлением», которое непосредственно копируется в память при загрузке программы.

Частично управлять редактированием программных сегментов можно заданием атрибутов в директиве SEGMENT или использованием директивы DGROUP для формирования группы сегментов. Эти директивы определяют целую группу ассоциаций, классов и типов выравнивания, а также определяют порядок и относительные начальные адреса сегментов программы. Эта информация является дополнительной к той, которая задается опциями LINK.

u Выравнивание сегментов

Для установки начального адреса сегмента LINK использует задаваемый директивой SEGMENT тип выравнивания: BYTE, WORD, PARA или PAGE. Эти ключевые слова обеспечивают выравнивание начала сегмента соответственно по границе байта, слова (2 байта), параграфа (16 байтов) или страницы (256 байтов). По умолчанию используется тип PARA.

 

Байты, пропускаемые из-за выравнивания, заполняются двоичными нулями.

u Номер кадра

Вычисляемый LINK начальный адрес сегмента зависит от типа выравнивания сегмента и размеров уже скопированных в исполнительный файл сегментов.

Этот адрес состоит из смещения и канонического номера кадра. Канонический адрес кадра определяет адрес первого параграфа в памяти, содержащего один или более байтов сегмента. Номер кадра всегда кратен 16. Смещением является расстояние в байтах от начала параграфа до первого байта сегмента.

Для типов PAGE иPARA смещение всегда нулевое, а для типов BYTE и WORD может быть ненулевым.

Номер кадра может быть получен из MAP-файла. Его содержат первые 5 16-ричных цифр start-адреса сегмента.

u Последовательность сегментов



LINK копирует сегменты в исполнительный файл в той же последовательности, в какой он их считывает из объектных файлов.

Сегменты, имеющие идентичные имена классов, считаются принадлежащими к одному типу классов и копируются в исполнительный файл как непрерывный блок.

u Комбинированные сегменты

Для определения того, будут ли два или более сегмента, имеющие одно и то же имя, соединены в один большой сегмент, LINK использует комбинации типов сегментов. В языке Ассемблера имеются следующие
типы комбинаций: PUBLIC, STACK, COMMON, MEMORY, AT и PRIVATE.

Если сегмент имеет тип комбинации PUBLIC, LINK автоматически соединяет его с другими сегментами, имеющими то же имя и принадлежащими к тому же классу. При соединении сегментов предполагается, что сегменты непрерывны и все адреса в сегментах доступны через смещение относительно адреса кадра. Результат получается таким же, как если бы полученный большой сегмент был определен в исходном файле сплошным куском.

LINK сохраняет тип выравнивания каждого сегмента. Это означает, что, хотя сегменты и включены в один большой сегмент, код и данные сегментов сохраняют свои типы выравнивания.

Если размеры соединяемых сегментов превышают 64К, выдается сообщение об ошибке.

Если сегмент имеет тип комбинации STACK, LINK выполняет ту же операцию, что и в случае PUBLIC. Различие заключается в том, что для STACK-сегментов в исполнительный файл записывается начальное значение указателя стека, которое представляет собой смещение от конца первого по порядку сегмента стека или комбинированного сегмента стека. В этом случае при использовании типа STACK для сегментов стека программисту нет необходимости предусматривать в программе загрузку регистра SS.

Если сегмент имеет тип комбинации COMMON, LINK автоматически соединяет его с другими сегментами, имеющими то же имя и принадлежащими к тому же классу. Однако, когда LINK соединяет общие сегменты, начало каждого сегмента устанавливается на один адрес, в результате чего образуются серии перекрывающихся сегментов. В итоге получается один сегмент, который по длине не превышает самый длинный из комбинируемых сегментов.

Сегменты с типом комбинации MEMORY трактуется LINK в точности так же, как и PUBLIC-сегменты. MASM обеспечивает тип MEMORYдля совместимости с линкерами, выделяющие MEMORY как особый тип комбинации.

Сегмент имеет тип комбинации PRIVATE в том случае, когда в исходном файле нет точных указаний относительно его типа комбинации. LINK не объединяет PRIVATE-сегменты.

u Группы

Объединение нескольких сегментов в группу позволяет адресовать их относительно одного адреса кадра. При этом неважно, принадлежат ли эти сегменты к одному классу. Когда LINK обнаруживает группу, он соответствующим образом перестраивает все адресные ссылки в ней.

Сегменты в группе не являются смежными, не принадлежат к одному классу и имеют разные типы комбинации. Но суммарный объем всех сегментов в группе не должен превышать 64К.

Группы не влияют на порядок загрузки сегментов в память. Даже если используются имена классов и объектные файлы вводятся в соответствующей последовательности, нет гарантии, что сегменты будут смежными. На практике LINK может поместить не принадлежащий группе сегмент в те же 64К памяти.

 

Хотя в LINK и нет строгой проверки того, помещаются ли все сегменты группы в 64К памяти, при обнаружении нарушения этого условия будет выдано сообщение о переполнении согласования.

u Согласования

Когда в процессе работы LINK уже известны адреса всех сегментов программы и организованы все комбинации сегментов и группы, линкер имеет возможность «согласовать» некоторые неразрешенные ссылки к меткам и переменным. Для этого LINK вычисляет соответствующие адрес сегмента и смещение и замещает временные значения, сгенерированные Ассемблером, на новые значения.

В соответствии с типами ссылок LINK реализует следующие типы согласований:

u Короткие.

u Внутренние относительно себя.

u Внутренние относительно сегмента.

u Длинные.

Размер вычисляемого значения зависит от типа ссылки. Если LINK обнаруживает ошибку в предсказанном размере ссылки, выдается сообщение о переполнении согласования. Это может произойти, например, когда программа пытается использовать 16-битовое смещение для доступа к инструкции в сегменте, имеющем другой адрес кадра. Это же сообщение может быть выдано, если все сегменты в группе не помещаются внутри блока памяти в 64К.

Короткая ссылка имеет место в инструкции JMP, передающей управление на помеченную инструкцию в том же сегменте или группе, отстоящую от JMP не более, чем на 128 байтов. Для такой ссылки LINK вырабатывает 8-битовое число со знаком. Если инструкция, на которую передается управление, находится в другом сегменте или группе, то есть, имеет другой адрес кадра, или отстоит более, чем на 128 байтов в любом направлении, формируется сообщение об ошибке.

Внутренняя относительно себя ссылка имеет место в инструкциях, адресующих данные относительно того же сегмента или группы. Для такой ссылки LINK формирует 16-битовое смещение. Если данные не принадлежат тому же сегменту или группе, выдается сообщение об ошибке.

Внутренняя относительно сегмента ссылка имеет место в инструкциях, адресующих данные в определенном сегменте или группе или относительно указанного регистра сегмента. Для этой ссылки LINK вырабатывает 16-битовое смещение. Если это смещение внутри специфицированного кадра оказывается больше 64К или меньше 0 или если начало канонического кадра, содержащего требуемые данные, неадресуемо, выдается сообщение об ошибке.

Длинная ссылка имеет место в инструкциях CALL, передающих управление в другой сегмент или группу. LINK в этом случае вырабатывает 16-битовый адрес кадра и 16-битовое смещение. Если вычисленное смещение больше 64К или меньше 0 или если начало канонического кадра, в который передается управление, неадресуемо, формируется сообщение об ошибке.

u Поиск библиотек

Процедура поиска библиотеки, иногда требуемой для разрешения внешних ссылок, обладает некоторыми особенностями. Если путь поиска указан вместе с именем библиотеки в командной строке, поиск осуществляется только там. Если же путь явно не указан, поиск производится в следующей последовательности:

1. В текущем подоглавлении.

2. Если в командной строке заданы один или несколько путей поиска для других библиотек, LINK просматривает их в порядке следования в строке.

3. На путях, определенных переменной LIB команды DOS SET. При помощи командыSET могут быть заданы несколько путей поиска, разделяемых точкой с запятой. Вид команды SET:

SET LIB=<список путей>



<== предыдущая лекция | следующая лекция ==>
Опции LINK | Исходная информация для символьной отладки


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 3.508 сек.