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

Обработка управляющей секцией(раздельное ассемблирование)

Управляющая секция – часть программы, которая обрабатывается ассемблером независимо от других частей программы. Т е при обработке одной управляющей секции, появляется 1 автономный объектный модуль, обрабатывающийся независимо от других частей программ(модулей) – запускается свой алгоритм ассемблирования.

    1. Управляющая секция в отдельном файле

    2. несколько управляющих секций расположены в одном файле. В этом случае при ассемблирования данного файла должны получить несколько объектных модулей.

Введем специальную директиву:

Имя _секции CSECT

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

2 типа перекрестных ссылок:

1) внешние имена – символическое имя, которые описаны в текущей управляющей секции и которые каким-то образом помечены для использования другими управляющими секциями – экспортируемые имена.

2) внешние ссылки - символическое имя, которые используются в данной секции, но в ней не описаны – импортируемые имена.

Все внешние имена и внешние ссылки должны быть описаны в начале управляющей секции. Для того, чтобы описать внешние имена и внешние ссылки введем специальные директивы:

EXTDEF ВИ1, ВИ2, ВИ3, ...

Эти внешние имена должны быть описаны.

EXTREF ВС1, ВС2, ...

Изменения в схеме ассемблирования с учетом внешних имен и внешних ссылок:

1й проход:

    1. счетчику адреса присваиваем адрес загрузки

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

    1. разбиваем входную строку на 3 составляющие: метка, мнимо код и операндная часть

    2. если в поле метки обнаружено символическое имя, то осуществляем его проверку в ТСИ. Если обнаружено в ТСИ и с ним сопоставлен адрес, то генерируем ошибку. Если поиск неудачен, то заносим его в ТСИ и (помечаем как внешнее и) сопоставляем адрес и счетчик адреса(для случая прямой адресации). (и либо создать дополнительный список для внешних имен, или тупо занести в ТСИ). Если имя присутствует в ТСИ, но с ним не сопоставлен адрес, то добавляем адрес и счетчик адреса (данное имя оказалось внешним)

    3. Анализируем поле МКОП операции:

      1. Если в поле МКОП операции встретилась директива резервирования памяти, то увеличиваем счетчик адреса на величину изменения памяти.

      2. если встретилась команда и обнаружена в ТКО, то заменяем соответствующим двоичным эквивалентом

      3. Если встретилась директива описания внешних имен, то добавляем внешние имена в ТСИ, заносим эти внешние имена в ТСИ с проверкой на уникальность. При этом они помечаются как внешние, и с ними не сопоставляется адрес.

если в поле МКОП встретилась директива описания внешних ссылок, то внешние ссылки заносим в таблицу внешних ссылок с проверкой на уникальность.

      1. Цикл заканчивается либо при обнаружении директивы end, либо следующей критической секции.

  1. окончание цикла при достижении директивы END. При этом происходит вычисление длины программы.

2й проход:

  1. Считываем 1ю строчку исходного текста программы и формируем запись-заголовок.

  2. организуем цикл по обработке строк исходного текста.

    1. анализируем поле операнда команды. Если в нем обнаружено символическое имя, то осуществляем поиск в таблице внешних ссылок.

      1. Если поиск удачен, то ее заменяем 0м адресом(в поле адреса), добавляем в таблицу модификаторов относительный адрес модифицируемой команды и указываем имя внешней ссылки, которая используется в этой команде. Рис2

2.1.2. если поиск неудачен, то осуществляем поиск в ТСИ. Если поиск этого имени в ТСИ удачен, то заменяем СИ относительным адресом из ТСИ и в таблицу модификаторов заносим относительный адрес модифицируемой команды. Если поиск в ТСИ неудачен, то генерируется ошибка: неизвестное символическое имя или внешняя ссылка.

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

3.цикл заканчивается директивой end или начала следующей секции.

4. цикл заканчивается при обнаружении директивы end осуществляем выгрузку таблицы модификаторов в объектный модуль.

Рис3

19.03

Лекция №6

Запись определения

Рис 1

При формировании внешних имен и внешних ссылок, не может быть так что ВС и ВИ описаны, но не используются или наоборот.

Такие программы называются программами в полном перемещаемом формате.

Однопроходные ассемблеры.

Алгоритм:

1. В счетчик адреса заносим адрес загрузки программы

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

    1. выделяются все основные части исходной строки

    2. рассматриваем поле метки. Если встретилось символическое имя, то осуществляем его поиск в ТСИ. Если поиск неудачен, то заносим его в ТСИ и назначаем его адрес из счетчика адреса. Если поиск удачен и с ним сопоставлен адрес, то генерируем ошибку. Если поиск удачен, но с ним не сопоставлен адрес, то (рассмотрим ситуацию ниже).

    3. если в поле в мнемокод операции встретилась директива резервирования памяти, то увеличиваем счетчик адреса на величину резервируемой области. Если встретилась команда, то заменяем мнемокод на двоичное представление

    4. рассматриваем операндную часть команды. Если встретилась константа, то переводим ее в двоичное представление. Если встретилось символическое имя, то осуществляется поиск его в ТСИ. Если поиск удачен и с именем сопоставлен адрес, то заменяем имя на адрес из ТСИ и формируем команду. Если поиск неудачен, то заносим это имя в ТСИ, при этом с ним не связываем никакой адрес и связываем некий дополнительный список, 1м элементом которого будет адрес команды, в операндной части которого встретилось это символическое имя. Если поиск удачен и с именем связан дополнительный список, то в этот список заносим адрес команды.

...

ADD L1,R1

...

JMP L1

...

L1 SAVE R1

Рис2

(ниже:)Если в поле метки встретилось символическое имя, то назначаем этому имени адрес из счетчика адреса и переходим к обработке вспомогательного списка, каждый элемент которого обрабатывается след образом: извлекаем адрес из списка, по этому адресу входим в команду, и символическое имя в команде изменяем на адрес данного имени. При этом элемент списка удаляется.

  1. цикл заканчивается при обнаружении команды end.

РАЗРАБОТАТЬ ОДНОПРОСМОТРОВУЮ СХЕМУ (АЛГОРИТМЫ) АССЕМБЛИРОВАНИЯ ДЛЯ ПРОГРАММ В ПЕРЕЩАЕМОМ И В ПОЛНОМ ПЕРЕМЕЩАЕМОМ ФОРМАТЕ

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