BC/NW 2007, №1, (10) :2.2
АССЕМБЛЕР ВИРТУАЛЬНОЙ FALGOL-МАШИНЫ
С.А. Чернов, Ю.Е. Мороховец,
(Москва, Московский энергетический институт
(технический университет), Россия)
К
настоящему времени на кафедре ВМСиС МЭИ(ТУ) завершена разработка программной
поведенческой модели базовой вычислительной машины (БВМ) с внутренним языком
высокого уровня – виртуальной FALGOL-машины. Имеющиеся в модели средства для отображения и
изменения состояния запоминающих устройств БВМ, позволяют создавать небольшие
программы, написанные непосредственно в машинном коде. На этапе разработки
программной модели этих возможностей было вполне достаточно, но использовать их
для создания программ значительного объёма – весьма сложно. В связи с этим,
возникла и была успешно решена задача разработки языка ассемблера БВМ,
собственно: синтаксиса, семантики языка, среды поддерживающей процесс
программирования и компилятора с Ассемблера в машинный код БВМ – ассемблера
БВМ.
Разработанный
ассемблер представляет собой средство трансляции программ, написанных с
использованием мнемокодов машинных команд в эквивалентные программы, состоящие
из машинных кодов команд БВМ. Следует отметить, что программа БВМ представляет
собой последовательность команд, а данные присутствуют в программе в виде
команд загрузки данных. Большая часть машинных команд представлена в синтаксисе
Ассемблера их мнемокодами, принятыми при разработке системы команд БВМ.
Исключение составляют команды
функциональных, блочных, процедурных и рекурсивно-процедурных скобок,
которые записываются в виде символов, принятых в языке FALGOL [1],
т.е. '[','{','(','<' и соответствующих им закрывающих скобок. На уровне
Ассемблера возможно использование как символьных имён переменных, так и
числовых индексов вхождения, т.е. допустимы команды val_0
и val_a, где a - имя переменной. Следом за любой скобкой, кроме '(',
допустимо указывать список имён переменных (возможно с инициализацией) и
подстановочных значений для последующего обращения к ним по именам, например: {a=5,b=-1.27:
...}.
Реализация
ассемблера базируется на виртуальной машине компилятора (ВМК) по структуре
схожей с БВМ. В основе ВМК лежат те же принципы тегированного представления и
ситуационной дешифрации команд [2]. Усовершенствованные средства описания
ситуаций позволили структурировать описание множества ситуаций, что
положительно сказалось на надёжности созданного ассемблера. Все описания
ситуаций сведены в единую структуру данных, которая при инициализации ВМК
преобразуется к виду, удобному для обработки. Множества значений тегов
представляются компактно-хранимыми объектами-множествами, для которых
определены операции объединения и разности, что позволяет систематизировать
описания ситуаций и автоматически генерировать загрузочные таблицы
ассоциативных ЗУ, необходимые для аппаратной реализации ВМК.
Код,
генерируемый ВМК, подвергается упаковке с использованием префиксов повторения,
термов с сокращёнными кодовыми частями, специальных тегов для часто
встречающихся команд. Код, полученный в результате ассемблирования, является
программой на машинном языке БВМ – компактен и эффективен, при этом машинный
язык БВМ обладает основными свойствами блочно-процедурных языков высокого
уровня [3].
Литература
1.Фальк В.Н. Теоретическая модель языка
программирования высокого уровня // Программирование, 1987, №4, - С. 3-12.
2.Мороховец Ю.Е., Чернов С.А. Дешифрация ситуаций в
вычислительной машине с внутренним языком высокого уровня. Международный форум
информатизации – 2002: Доклады
международной конференции "Информационные средства и технологии".
15-18 октября 2002 г., в 3-х т.т. Т1–М.: Янус-К, 2002 - С. 22-25
3. Пентковский В.М. Язык программирования Эль-76.
Принципы построения языка и руководство к пользованию. – 2-е изд. испр. и доп.
– М.: Наука. Гл. ред. физ.-мат. лит., 1989 (Б-чка программиста).