Самоучители для программиста
Алгоритм выполнения 2го прохода следующий
Алгоритм выполнения 2-го прохода - следующий:
|
- 2-й проход Загрузчика
- Установка на начало списка имен объектных модулей.
- Выборка следующего имени из списка объектных модулей. Если весь список объектных модулей обработан - переход на окончание 2-го прохода.
- Создание для модуля Локальной таблицы внешних символов и Таблицы перемещений - пустых.
- Чтение заголовка очередной записи объектного модуля, если все записи модуля прочитаны - переход к обработке перемещений в модуле.
- Чтение остальной части записи (размер записи содержится в ее заголовке).
- Разветвление в зависимости от типа записи.
- Для кодовой записи считывается относительный адрес записи и переводится в фактический.
- Тело кодовой записи считывается и размещается в памяти по фактическому адресу.
- Для записи связывания перебираются находящиеся в ней элементы Таблицы имен
- Обработка разветвляется в зависимости от типа имени.
- Для имен сегментов или входных точек относительный адрес переводится в фактический.
- Имя внешней точки ищется в Глобальной таблице внешних имен.
- Если имя не найдено в Глобальной таблице, выдается сообщение об ошибке.
- Если имя найдено в Глобальной таблице, в значение адреса из Глобальной таблицы становится значением этого имени.
- Элемент с откорректированным адресом заносится в Локальную таблицу имен.
- Для записи перемещения перебираются находящиеся в ней элементы Таблицы перемещения.
- Относительный адрес в элементе заменяется на фактический...
- ... и элемент добавляется в Таблицу перемещений.
- После того, как весь модуль прочитан, выполняется перебор Таблицы перемещений модуля.
- Для каждого элемента Таблицы перемещений имя, записанное в его поле имени ищется в Локальной таблице имен и из Локальной таблицы имен выбирается связанный с этим именем адрес.
- Из кода программы выбирается код, адрес и длина которого записаны в элементе Таблицы перемещений.
- Над выбранным кодом и адресом, выбранным из Таблицы имен выполняется операция сложения или вычитания, результат записывается на место кода.
- После перебора всей Таблицы перемещений, освобождаются Таблица перемещений и Локальная таблица имен модуля, и управление передается на обработку следующего модуля.
- После обработки всех объектных модулей 2-й проход заканчивается.
|
Содержание раздела