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