Статус нашего сайта: |
ICQ Information Center |
ICQ SHOP 5-значные 6-значные 7-значные 8-значные 9-значные Rippers List ОПЛАТА СТАТЬИ СЕКРЕТЫ HELP CENTER OWNED LIST РОЗЫСК!New! ICQ РЕЛИЗЫ Протоколы ICQ LOL ;-) Настройка компьютера Аватарки Смайлики СОФТ Mail Checkers Bruteforces ICQTeam Soft 8thWonder Soft Other Progs ICQ Patches Miranda ICQ ФорумАрхив! ВАШ АККАУНТ ICQ LiveJournal
РекламаНаш канал:irc.icqinfo.ru |
Таненбаум Э.- Архитектура компьютера. стр.414Компоновщик объединяет отдельные адресные пространства объектных модулей в единое линейное адресное пространство. Для этого совершаются следующие шаги: 1. Компоновщик строит таблицу объектных модулей и их размеров. 2. На основе этой таблицы он приписывает начальные адреса каждому объектному модулю. 3. Компоновщик находит все команды, которые обращаются к памяти, и прибавляет к каждой из них константу перераспределения, равную начальному адресу этого модуля. Необходимо отметить, что сегментный способ организации был использован только в первой версии OS/2, которая была 16-разрядной и разрабатывалась для микропроцессора 286. Поэтому относить эту систему к Pentium 4 представляется не вполне правильным. Начиная с 1993 года, все последующие версии OS/2 были 32-разрядными и, как и другие современные операционные системы, не поддерживают сегментирование, а используют только страничный механизм. — Примеч. научн. ред. Рис. 7.4. Объектные модули после размещения в двоичном образе, но до перераспределения памяти и компоновки (а); те же объектные модули после компоновки и перераспределения памяти (б). В результате получается исполняемый двоичный код, который можно запускать 4. Компоновщик находит все команды, которые обращаются к процедурам, и вставляет в них адреса этих процедур. Таблица 7.6 соответствует построенной на первом шаге таблице объектных модулей, представленных на рис. 7.4. В ней даются имя, длина и начальный адрес каждого модуля. На рис. 7.4, б показано, как выглядит адресное пространство после завершения работы компоновщика. Таблица 7.6. Имя, длина и начальный адрес каждого модуля на рис. 7.4
Структура объектного модуля Объектные модули обычно состоят из шести частей: 1. Идентификация. 2. Таблица точек входа. 3. Таблица внешних ссылок. 4. Машинные команды и константы. 5. Словарь перераспределения. 6. Конец модуля. В первой части содержатся имя модуля, некоторая информация, необходимая компоновщику (например, данные о длине различных частей модуля), а иногда дата ассемблирования. Вторая часть объектного модуля — это список символов, определенных в модуле, вместе с их значениями. К этим символам могут обращаться другие модули. Например, если модуль состоит из процедуры bigbug, то элемент таблицы будет содержать символьную строку "bigbug" с соответствующим адресом. Программист, пишущий на языке ассемблера, с помощью директивы PUBLIC указывает, какие символические имена считаются точками входа. Третья часть объектного модуля состоит из списка символических имен, которые применяются в данном модуле, а определены в других модулях. Здесь также имеется еще один список, который показывает, какие именно символические имена используются теми или иными машинными командами. Второй список нужен для того, чтобы компоновщик мог вставлять правильные адреса в команды, которые используют внешние имена. Процедура может вызывать другие независимо транслируемые процедуры, объявив имена вызываемых процедур внешними. Программист, пишущий на языке ассемблера, с помощью директивы EXTERN указывает, какие символы нужно объявить внешними. В некоторых компьютерах точки входа и внешние ссылки объединены в одной таблице. |