SisProg1 (565138), страница 2
Текст из файла (страница 2)
В рамках второго прохода ассемблирования используем таблицу символических имен первого прохода. Сами метки больше не нужны и их выделение и обработка не требуются. Теперь требуется выделять поле мнемокода и поля расположения операндов.
Сохраним упрощающие допущения предшествующей лабораторной работы. Вместо мнемокода требуется включить в создаваемую команду код соответствующей операции. Для этого используем таблицу, описывающую соответствие «мнемокод код операции». Так как ПСК отсутствует, то имена в правой части, отличные от имен меток, отсутствуют. Поэтому считаем, что операндами будут абсолютные адреса (в 16-ричном коде) или имена меток. Допустим, что поле мнемокода состоит из 5 символов, не обязательно полностью занятое.
Пусть система команд ЭВМ одноадресная и поле операнда занимает 5 позиций. Если это не команды перехода, то там находится адрес операнда в 16-ричном коде (код «ABCDEF»). Его при разборке можно оставить в покое. Но если мнемокод отвечает команде перехода, то там стоит имя метки. Поэтому требуется заменить это имя на номер метки, используя таблицу символических имен первого прохода, предварительно преобразовав его в 16-ричный код.
Дополнительно строится таблица использованных в правой части меток. Сопоставляя эту таблицу с таблицей имен первого прохода можно получить таблицу неиспользованных меток. Неиспользованные метки не являются ошибкой, но это повод для предупреждения программиста. Так формируется таблица предупреждений (warning) о том, что имеются лишние метки.
Задание
Требуется разработать собственную таблицу «мнемокод код операции» на заданное число команд.
Спроектировать программу второго прохода с использованием таблицы преобразования мнемокодов и таблицы символических имен для исходной программы с заданным числом строк в соответствии с вариантом задания. Таблицу имен и параметры входной программы взять из предыдущей работы.
Продемонстрировать работу на собственной программе, соответствующей принятым допущениям.
Варианты заданий
№ варианта | Максимальная длина мнемокода | Число различных мнемокодов | Максимальная длина операнда | Число команд перехода в программе |
| 5 | 10 | 4 | 2-5 |
| 4 | 14 | 5 | 2-7 |
| 6 | 10 | 6 | 3-8 |
| 5 | 12 | 6 | 2-4 |
| 4 | 14 | 4 | 2-5 |
| 6 | 10 | 5 | 4-9 |
| 4 | 12 | 6 | 5-8 |
| 5 | 14 | 4 | 4-8 |
Лабораторная работа № 4
РАЗРАБОТКА ПРОСТЕЙШЕГО МАКРОГЕНЕРАТОРА
Макроопределение во входной программе представляет открытую подпрограмму на языке ассемблера. Рассмотрим простейший случай. Пусть имеем одноадресную систему команд в ЭВМ. Макросы не содержат вложений. Заголовок макроса содержит название (символическое имя) макроса в поле метки и ключевое слово MACRO в поле мнемокода. Окончание тела определено ключевым словом ENDM в поле мнемокода.
Например, введен макрос PLUS, имеющий вид
PLUS MACRO %1, %2, %3
MOV1 %2
ADD %3
MOV1 %1
ENDM
Здесь % - маркер формального параметра,
1, 2, 3 – номера формальных параметров,
MOV1 – передача в сумматор,
MOV2 – передача в ОЗУ.
При обработке макросов макрогенератор введет две таблицы: одна – словарь имен, вторая – таблица тел макроопределений.
Очевидно, что при просмотре текста программы требуется, чтобы выделялось поле мнемокода. Если там содержится ключевое слово MACRO, то символическое имя этого макроса должно попасть в таблицу имен.
Таблица имен Таблица тел
. | … | |
| MOV1 %2 | |
. | ADD %3 | |
MOV1 %1 | ||
… | ||
|
адрес начала
размещения тела
в таблице тел
Предположим, что все макроопределения в теле входной программы расположена до обращений к ним.
Обращение ( макрообращение ) формируется так: в поле мнемокода помещается имя макроса и фактические параметры. Например,
…
PLUS A, B, C
…
Это значит, что на это место необходимо подставить фрагмент
MOV1 B
ADD C
MOV1 A
Для удобства чтения ассемблерной программы строка PLUS A, B, C оставляется в тексте, но перед ее началом вставляется признак комментария; например, “@” или “;”.
Обычно при такой подстановке требуется просмотреть таблицу имен. Просмотр ведется на сверху-вниз (слева-направо), а наоборот снизу-вверх. Такой подход позволяет разрешить проблему переопределения макрооопределений. В этом случае подставляется последнее определение.
Логика работы макрогенератора может быть представлена, как это показано на рис.4.1.
Задание
Требуется доработать структурную схему работы макрогенератора в части выдачи обработанного макроопределения и подстановки его на место макрообращения. Разработать программу реализации макрогенератора в предположении, что формат строк фиксированный и согласуется с допущениями и требованиями, сформулированными в предыдущих работах.
Укрупненная схема работы макрогенератора
Начало
1
чтение строки
текста
да
конец конец
файла?
нет
это да
M
ACRO?
нет поместить
имя макроса в
выделение таблицу имен
п
оля мнемокода
да есть в читать
табл. имен? строку
подстановка нет
факт. параметров да
ENDM?
вывести вывести нет
макрос строку неизменной
добавить строку к
табл. тел макро-
определений
1
Рис. 4.1.