Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
pz.1.doc
Скачиваний:
3
Добавлен:
15.09.2019
Размер:
435.2 Кб
Скачать

3.3 Описание структур данных модуля

В процессе трансляции ассемблер использует следующие структуры данных.

Таблица 3.1 - Структуры данных транслятора

Структура

Тип

Назначение

Заголовок

Строка

Дополнительная информация, помещаемая в объектный модуль.

Таблица символических имен

Hash таблица

Строка

Выражение

Hash-таблица, которая содержит все символические имена, определенные в данном модуле (т.е. метки и выражения) и выражения, которые позволяют их вычислить

Список модификаторов

Список структур типа {адрес, длина, строка-модификатор}

Список структур-модификаторов для записи в объектный файл

Тело программы

Список структур типа {адрес, длина, строка-запись}

Список записей, определяющих тело программы

Таблица 3.2 - Структуры данных модуля

Система команд

Список команд

Используется для поиска, инициализации и последующей генерации объектного кода текущей обрабатываемой команды

Текущая обрабатываемая команда

Временный список команд

Используется для правильной инициализации и последующей генерации объектного кода команды

Обрабатываемый файл

Ссылка на файл

Исходный текст обрабатываемого файла

№строки

Целое

Номер обрабатываемой строки исходного файла

3.4 Примеры процедурных модулей.

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

Пример 1.

.ПРОЦ COOL

.DB X 5

.DB Y 1

.DB Z 3

.DB K 0

ПЕР IR0 [X]

ПЕР ACC IR0

МЕТКА1:

ПЕР IR0 [Y]

ДОБ ACC IR0

ПЕР IR1 1

ПЕР IR0 [Z]

ВЫЧ IR0 IR1

ПНН МЕТКА1

ВЫВ 20 IR0

.КОН ПРОЦ COOL

Пример 2.

.ПРОЦ GETL

.DB ONE 1

.DB LENGTH 0

.DB END "$"

ПЕР IR R0

МЕТКА2:

ДОБ R2 ONE

ПЕР R1 ACC

ВЫЧ R1 R0

ПЕЗ МЕТКА2

ПЕР [LENGTH] R2

ПЕР R0 [END]

ПЕР R0 [LENGTH]

ВЫВ R0

.КОН ПРОЦ GETL

4 Алгоритм трансляции

4.1 Описание функционирования

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

{метка:} {оператор {параметр } | .директива {параметр }} {;комментарий}

то лексический разбор не представляет особого труда.

Вначале в строке выделяются все метки, которые записываются в таблицу символических имен в виде:

метка  адрес_метки,

где адрес_метки - числовое значение адреса метки в данном файле.

Возможный комментарий отбрасывается.

Обработка параметров и операторов макроподстановок, локальных меток производится на этапе синтаксического разбора, перед трансляцией в объектный код.

Широкое применение в структурах транслятора Hash таблиц позволило создать эффективный транслятор, который не требует представления данных во внутренних числовых форматах, что значительно облегчает отладку.

4.2 Описание алгоритма

Первый просмотр – макроопределения.

Алгоритм первого просмотра проверяет каждую строку входного текста. Если она представляет собой псевдооперацию Macro, то все следующие за ней строки запоминаются. Первая строка макроопределения – имя самого макроса. Имя заносим в таблицу имен МНТ. При этом происходит подстановка номеров формальных параметров, вместо их имен. Если встречается команда End, то весь текст обработан, и управление можно передавать второму просмотру для обработки макрокоманд.

Второй просмотр – расширение макрокоманд.

Алгоритм второго просмотра проверяет мнемокод каждого предложения. Если это имя содержится в МНТ, то происходит обработка макропредложения по правилу: из таблицы МНТ берется указатель на начало описания макроса в таблице макроопределений МДТ. Макропроцессор готовит массив списка, содержащий таблицу индексов формальных параметров и операндов макрокоманды. Чтение производится из МДТ, после чего в прочитанную строку подставляются параметры, и полученная строка записывается. Когда встречается директива End, текст полученного кода передается для компиляции ассемблеру.

4.3 Первый просмотр.

Начало

МДТС=0, МНТС=0

ФЛАГ ВЫХОДА=0

Цикл пока (ФЛАГ ВЫХОДА==0) {

Чтение следующей строки ВХТ

Если (операция MACRO) { вывод строки в ВЫХТ1

Если (операция END) ФЛАГ ВЫХОДА=1 }

Иначе { чтение идентификатора

Запись имени индекса в МНТ, МНТС++

Запись имени в МДТ, МДТС++

Цикл {чтение следующей строки ВХТ

Подстановка индексов операторов

Добавление в МДТ, МДТС++

} Пока (операция MEND)

}}

переход ко второму просмотру

Конец

4.4 Второй просмотр.

Начало

ФЛАГ ВЫХОДА=0

Цикл пока (ФЛАГ ВЫХОДА==0) {

Чтение строки из ВЫХТ1

НАЙДЕНО = поиск кода в МНТ

Если (НАЙДЕНО) { запись в ВЫХТ2 строки

Если (операция END) { ФЛАГ ВЫХОДА=1 }

}

иначе { УКАЗАТЕЛЬ = индекс из МНТ

Заполнение списка параметров АЛА

Цикл {УКАЗАТЕЛЬ++

Чтение следующей строки из МДТ

Подстановка параметров,

Вывод в ВЫХТ2

} Пока (операция MEND)

}}

переход к компиляции

Конец

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