
- •Введение
- •2 Описание архитектуры микроэвм
- •Ряд команд не имеют аргументов и состоят только из кода операции, например, останов, сброс и установка флагов.
- •Описание системы команд и режимов адресации
- •3 Описание языка мнемокода
- •3.2 Разделы ассемблера
- •3.2.1 Алфавит
- •3.3 Описание структур данных модуля
- •4 Алгоритм трансляции
- •5 Описание объектного кода
- •6 Описание программного продукта
- •Приложение а
- •А.4 Основные этапы разработки
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)
}}
переход к компиляции
Конец