Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Переместимые коды и абсолютные коды




Назначение и функции компоновщика.

Лекция 4.

Редактор связей (компоновщик) выполняет две функции. Во-первых, как можно заключить по его названию, он комбинирует (компонует, редактирует) различные объектные файлы. Вторая его функция — разрешать адреса вызовов и инструкций загрузки, найденных в редактируемых объектных файлах. Чтобы понять принцип работы редактора связей, рассмотрим подробнее процесс раздельной компиляции.

 

Раздельная компиляция

Раздельная компиляция — это возможность, позволяющая разбить программу на несколько файлов, скомпилировать каждый из этих файлов отдельно, а потом скомпоновать их, чтобы в конечном итоге создать загрузочный модуль. Результатом работы компилятора является объектный файл, а результатом работы редактора связей — загрузочный модуль. Редактор связей физически связывает файлы, внесенные в список компоновки, в один программный файл и разрешает внешние ссылки. Внешняя ссылка создается каждый раз, когда программа из одного файла ссылается на код из другого файла. Это происходит при вызове функции и при ссылке на глобальную переменную. Например, при компоновке двух приведенных ниже файлов, должна быть разрешена ссылка в файле 2 на идентификатор count, объявленный в файле 1. Редактор связей сообщает программе из файла 2, где найти count.

 

Файл 1 Файл 2

int count; #include <stdio.h>

void display(void); extern int count;

 

int main(void) void display(void)

{ {

count = 10; printf("%d", count);

display(); }

return 0;

}

 

Аналогично, редактор связей укажет файлу 1, где находится функция display(), чтобы можно было ее вызвать.

При генерации объектного кода функции display(), компилятор подставляет в негo вместо адреса идентификатора count "заполнитель", т.е. ссылку на внешнее имя, потому что он не располагает информацией о том, где находится count. Нечто подобное происходит при компиляции main(). Адрес функции display() не известен, поэтому вместо него используется "заполнитель", т.е. ссылка на внешнюю программу. При компоновке этих двух файлов содержащиеся в них внешние ссылки заменяются адресами соответствующих элементов. Являются ли эти адреса абсолютными или переместимыми, — зависит от среды.

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

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

 




Поделиться с друзьями:


Дата добавления: 2014-01-15; Просмотров: 472; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




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