Системное программирование. Конспект лекций


Алгоритм выполнения 1-го прохода следующий:


  • 1-й проход Макропроцессора
  • Инициализация: открытие исходного файла, создание пустых таблиц, признак "обработка макроопределения" устанавливается в FALSE.
  • Чтение следующей строки исходного файла с проверкой конца файла.
  • Если при чтении строки найден конец файла, выводится сообщение об ошибке, закрываются файлы, освобождается память...
  • ... и Макропроцессор завершается с признаком ошибки.
  • Если конец файла не достигнут, выполняется лексический разбор прочитанной строки с выделением имени и мнемоники операции.
  • Алгоритм Макропроцессора разветвляется в зависимости от мнемоники операции
  • Если мнемоника операции MACRO - заголовок макроопределения, то в таблицу имен макроопределений заносится имя, находящееся в этом операторе и начальный адрес свободной области в таблице макроопределений. (При занесении имени в таблицу имен макроопределений проверяется, нет ли уже в таблице такого имени, если есть - ошибка)
  • Оператор MACRO записывается в таблицу макроопределений.
  • Признак "обработка макроопределения" устанавливается в TRUE.
  • Если мнемоника операции MEND - конец макроопределения, то оператор записывается в таблицу макроопределений...
  • ... и признак "обработка макроопределения" устанавливается в FALSE.
  • Если мнемоника операции END - конец программы, то проверяется установка признака "обработка макроопределения".
  • Если этот признак установлен в TRUE, т.е., конец программы встретился до окончания макроопределения, то выводится сообщение об ошибке, закрываются файлы, освобождается память...
  • ... и Макропроцессор завершается с признаком ошибки.
  • Если этот признак установлен в FALSE, то выполняются завершающие операции ...
  • ... и заканчивается 1-й проход Макропроцессора.
  • При любой другой мнемонике оператора проверяется установка признака "обработка макроопределения".
  • Если этот признак установлен в TRUE, то оператор записывается в таблицу макроопределений, если признак установлен в FALSE, то оператор игнорируется Макропроцессором.


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



  • Содержание раздела