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.
 PLUS
 














