Статус
нашего
сайта:
ICQ Secrets Center is Online  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


Таненбаум Э.- Архитектура компьютера. стр.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

Модуль

Длина

Начальный адрес

а

в

С

1100

d

1600

Структура объектного модуля

Объектные модули обычно состоят из шести частей:

1. Идентификация.

2. Таблица точек входа.

3. Таблица внешних ссылок.

4. Машинные команды и константы.

5. Словарь перераспределения.

6. Конец модуля.

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

Вторая часть объектного модуля — это список символов, определенных в модуле, вместе с их значениями. К этим символам могут обращаться другие модули. Например, если модуль состоит из процедуры bigbug, то элемент таблицы будет содержать символьную строку "bigbug" с соответствующим адресом. Программист, пишущий на языке ассемблера, с помощью директивы PUBLIC указывает, какие символические имена считаются точками входа.

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


⇐ Предыдущая страница| |Следующая страница ⇒

.