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