Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СПО лекции.docx
Скачиваний:
22
Добавлен:
01.08.2019
Размер:
92.68 Кб
Скачать

Чистый загрузчик для мпф:

Алгоритм:

1й проход:

1. адрес настройки модуля АНМ=0(модуль в перемещаемом формате)

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

2.1. считываем запись типа Н, извлекаем имя модуля, помещаем его в ТВИ с проверкой на уникальность и присваиваем адрес из АНМ(для 1го модуля будет 0).

2.2. обрабатываем раздел внешних имен. Заносим все внешние имена в ТВИ(если происходит совпадение имен – генерируется ошибка). При этом с каждым именем сопоставляется адрес, получаемый как сумма относительного адреса внешнего имени + адрес настройки модуля

2.3. значение АНМ увеличиваем на длину модуля

Заканчиваем работу, когда заканчиваются модули.

2й проход:

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

1.1. обрабатываем тело модуля(Т): к относительному адресу загрузки записи прибавляем АНМ, получаем АЗЗ в едином модуле. В выходной объектный модуль переносим измененную запись типа Т.

1.2. обрабатываем раздел модификаторов(М): к ОАМК в текущем модуле прибавляем значение переменной АНМ. Полученный адрес заносим во вспомогательную таблицу модификаторов. Если в модифицируемой команде используется внешняя ссылка, то осуществляется ее поиск в ТВИ. Если поиск неудачен – ошибка(неопределенная внешняя ссылка), если поиск удачен – внешняя ссылка заменяется адресом из ТВИ.

1.3. производим выгрузку ТМ в выходной объектный модуль

1.4. дополнительной обработки записи К не требуется, т к модуль в перемещаемом формате всегда загружается с 0.

Чистый компоновщик для маф

Однопросмотровая схема:

1. Переменной АЗМ присваиваем адрес загрузки

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

2.1. считываем заголовок модуля Н, имя помещается в ТВИ с проверкой на уникальность и ему присваивается адрес из АЗМ(для 1го будет адрес загрузки)

2.2. обрабатываем запись типа Т?: внешние имен модуля. Если внешнее имя отсутствует в ТВИ, то помещаем его туда, при этом сопоставляя с ним его реальный адрес(сумма относительного адреса внешнего имени + АЗМ). Если имя присутствует и с ним сопоставлен адрес, то ошибка(дважды определенное внешнее имя). Если имя присутствует, но с ним не сопоставлен адрес(ВИ не определено), то назначаем ему адрес РАВИ и организуем проход по дополнительному списку, связанному с данным именем, каждый элемент которого обрабатывается следующим образом: извлекается Реальный Адрес Модифицируемой Команды и по этому адресу производят настройку операндной части: в эту часть заносится РАВС из ТВИ, элемент списка после этого удаляется.

3. обрабатывается раздел R внешних ссылок. Все внешние ссылки из этого раздела заносим в ТВИ с проверкой на уникальность: если ВИ отсутствует, то помещаем ВС в ТВИ и помечаем ее как неопределенную, если ВИ присутствует – ничего не делаем(либо она неопределенна в предыдущих модулях, либо определена и ей сопоставлен адрес)

4. обрабатываем запись Т: к Относительному Адресу Загрузки Записи + АЗМ = РАЗЗ и по этому адресу загружаем в память тело команды.

5. обрабатываем раздел М: к ОАМК + АЗМ = РАМК, по этому адресу в модифицируемой команде настраиваем операндную часть: к АМК + АЗМ , получаем Реальный Адрес Операнда(если не внешняя ссылка). Если в команде встретилось использование внешней ссылки, то осуществляем поиск в ТВИ: если поиск удачен и с ВИ сопоставлен адрес, то заменяем ВС адресом из ТВИ; если с ВИ не сопоставлен адрес, то в дополнительный список заносим РАМК, в операндной части которой встретилось упоминание ВИ

6. длина АЗМ увеличивается на длину модуля

Чистый компоновщик для МАД

2хпросмотровая схема:

Аналогичен связывающему загрузчику

2.04.

Лекция №8

Рассмотрим на каких этапах может производиться процесс настройки перекрестных ссылок.

Статическая и динамическая компоновка

???

Макропроцессоры

Макропроцессор – программа, которая переводит исходный текст на макроязыке в выходной текст на базовом языке. Макроопределение(макрос) – объединение нескольких команд базового языка в более крупные ??? образования. Формат макроса:

Имя_директива MACRO [список формальных параметров]

....

....

MEND

Обращение к макросам будет производиться по имени макроса, и будет выглядеть как обращение к команде базового языка.

M1_MACRO X,Y

...

MEND

...

[metka] M1_5,6

Процесс подстановки вместо макровызова тела макроса называется макрогенерацией или макроассемблированием. Макропроцессор должен уметь:

      1. Собрать в одном тексте макросы в некие специальные таблицы

      2. Выполнить процесс макроассемблирования

Процесс сбора макросов в специальные таблицы называется макроопределением.

Макропроцессоры используются:

  1. в случае если в коде есть одинаковые участки

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]