- •Создание программ в перемещаемом формате
- •Обработка управляющей секцией(раздельное ассемблирование)
- •Программы связывания и загрузки
- •Структура и алгоритм работы сз
- •Однопросмотровая схема работы связывающего загрузчика
- •Особенности реализации чистых компоновщиков
- •Чистый загрузчик для мпф:
- •Чистый компоновщик для маф
- •Возможности макроязыков
- •Обработка вложенных макросов
- •Использование макрокоманд внутри макроса
- •Алгоритм обработки макрокоманд внутри макроса (неопережающее описание)
- •Дополнительные возможности макропроцессора
- •Структура трансляторов
- •Правила вывода Бэкуса-Наура:
- •Нисходящий синтаксический анализ
Однопросмотровая схема работы связывающего загрузчика
Табл 2
Алгоритм:
переменной АЗМ присваиваем адрес загрузки (АЗМ = АдЗ)
организуем цикл по обработке входного потока модулей -каждый модуль обрабатывается следующим образом:
считывается заголовок модуля, имя модуля помещается в ТВИ и ему присваивается адрес из АЗМ
обрабатываем раздев внешних имен модуля
обрабатываем запись типа D следующим образом: если имя отсутствует и ???, при этом сопоставляем РАВИ = ОАВИ+АЗМ. Если имя присутствует и с ним сопоставлен адрес, то ошибка. Если имя присутствует но с ним не сопоставлен адрес, то назначаем ему адрес такого вида РАВИ = ОАВИ+АЗМ и организуем проход по дополнительному списку, каждый элемент которого обрабатывается следующим образом: извлекается реальный адрес модифицируемой команды(РАМК) и по этому адресу производим настройку операндной части. Помещается реальный адрес внешний ссылки из ТВИ. Потом элемент списка удаляется.
обрабатываем раздел внешних ссылок: все внешние ссылки из этого раздела заносим в ТВИ с проверкой на уникальность. Если такое ВИ отсутствует, то помещаем внешнюю ссылку в ТВИ и помечаем ее как неопределенную. Если ВИ присутствует, то ничего не делаем.
обрабатываем запись типа Т: к относительному адресу загрузки прибавляем АЗМ, получаем реальный адрес загрузки записи и по нему загружаем в память команду.
обрабатываем раздел модификаторов: к относительному адресу модифицируемой команды прибавляем АЗМ, получаем реальный адрес команды. По этому адресу в команде производим настройку операндной части: к адресу в команде прибавляем АЗМ получаем реальный адрес операнда. Если встретилось использование внешней ссылки, то осуществляем ее поиск в ТВИ. Если поиск удачен и с внешним именем сопоставлен адрес, то заменяем внешнюю ссылку адресом из ТВИ. Если с ВИ не сопоставлен адрес, то в дополнительный список добавляем реальный адрес модифицируемой команды в операндной части которой встретилось использование этого ВИ.
запись типа е таким же образом
переменную АЗМ увеличиваем на длину модуля
Преимущества: все работает быстрее, недостаток – более сложная структура и более сложный алгоритм.
Особенности реализации чистых компоновщиков
Рассмотрим ситуацию, когда модуль в перемещаемом формате
ДЗ схемка
Понадобится ТВИ и переменная АНМ – адрес настройки модуля, и вспомогательная таблица модификаторов ТМ
Рис2 + рис3
Однопросмотровая схема
переменной АНМ = 0
организуем обработку входного потока модулей, каждый из которых обрабатывается следующим образом:
считываем запись типа Н, извлекаем ??? помещаем в ТВИ с проверкой на уникальность и присваиваем адрес из переменной АНМ
обрабатываем раздел внешних имен: если имя присутствует в ТВИ и с ним сопоставлен адрес, то ошибка, если отсутствует, то заносим в ТВИ присваиваем из адрес из переменной АНМ. Если присутствует и оно неопределенное, то сопоставляем с ним адрес и организуем проход по вспомогательному списку(см выше).
обрабатываем тело модуля: к относительному адресу загрузки записи прибавляем АНМ, получаем адрес загрузки записи в едином модуле и в выходной объектный модуль переписываем измененную запись типа Т.
обрабатываем раздел модификаторов: к относительному адресу модифицируемой команды в текущем модуле прибавляем значение переменной АНМ, полученный адрес заносим в вспомогательную таблицу модификаторов. Если в модифицируемой команде используется ВС, то осуществляется ее поиск в ТВИ. Если поиск удачен – ВС заменяется адресом из ТВИ, если неудачен – то ВС заносится в ТВИ и помечается как неопределенная и с ней связывается дополнительный список, 1м элементом которого будет относительный адрес модифицируемой команды, в операндной части которого встретилась ВС.
производим выгрузку таблицы модификаторов в выходной объектный модуль
ДЗ НАПИСАТЬ 2ХПРОСМОТР СХЕМУ РАБОТЫ ЧИСТОГО КОМПОНОВЩИКА ДЛЯ СЛУЧАЯ ВЫХ ОБЪЕКТНОГО МОДУЛЯ В ПЕРЕМАЩЕМОМ ФОРМАТЕ НАПИСАТЬ 1 И 2 ПРОСМ СХЕМУ ЧК, КОГДА НА ВЫХОДЕ ПОЛУЧАЕМ МОДУЛЬ В АБСОЛЮТНОМ ФОРМАТЕ
ДЗ: