
- •Создание программ в перемещаемом формате
- •Обработка управляющей секцией(раздельное ассемблирование)
- •Программы связывания и загрузки
- •Структура и алгоритм работы сз
- •Однопросмотровая схема работы связывающего загрузчика
- •Особенности реализации чистых компоновщиков
- •Чистый загрузчик для мпф:
- •Чистый компоновщик для маф
- •Возможности макроязыков
- •Обработка вложенных макросов
- •Использование макрокоманд внутри макроса
- •Алгоритм обработки макрокоманд внутри макроса (неопережающее описание)
- •Дополнительные возможности макропроцессора
- •Структура трансляторов
- •Правила вывода Бэкуса-Наура:
- •Нисходящий синтаксический анализ
Использование макрокоманд внутри макроса
...
M1 MACRO
...
MEND
...
M2 MACRO
...
M1
MEND
...
M2
Изменения вносимые в основную схему макроассемблирования:
обрабатываем очередную строку исходного текста. Если в поле мнемокод встретилась команда базового языка – переносим без изменения. Если встретилась директива MACRO, то процессор переключается в режим макроопределения. Если встретилось обращение к макросу, процессор переключается в режим макрогенерации. При этом из таблицы ТМО извлекается тело макроса с подстановкой фактических параметров. При этом анализируется поле мнемокод операции. Если встретилась инструкция базового языка, переносим на выход без изменения. Если встретилось обращение к другому макросу, то осуществляем поиск в ТИМ. Поиск неудачен – ошибка, поиск удачен – то запоминаем строку возврата(т е следующая после макрокоманды строка) список фактических параметров того макроса, которая обрабатывает и переключаемся на макрогенерацию нового макроса. Перед тем приступить к макрогенерации нового макроса - выполнить проверку на наличие его в создаваемой последовательности макросов(в списке вызова).
Изменения в ТМО:
Рис1
ДЗ НАПИСАТЬ АЛГОРИТМ ОБРАБОТКИ МАКРОКОМАНД ВНУТРИ МАКРОСА НА СЛУЧАЙ НЕОПЕРЕЖАЮЩЕГО ОПИСАНИЯ(2Х ОДНОПРОСМОТРОВУЮ СХЕМУ)
ДЗ
Алгоритм обработки макрокоманд внутри макроса (неопережающее описание)
1просмотровая схема:
Организуем цикл по обработке строк исходного текста программы, каждая строка обрабатывается следующим образом:
если в строке встретилась инструкция базового языка(Ассемблера), то она переносится в выходной файл без изменений.
если встретилась директива MACRO, то в таблицу ТИМ заносится имя макроса, а ТМО переносим тело макроса без изменений и устанавливаем указатель на начало и конец этого макроса в ТМО.
если встретилось обращение к макросу, то осуществляем поиск в ТИМ: если поиск неудачен, то в ТИМ заносим имя макроса и с ним связывается дополнительный список, содержащий строку вызова макроса, если поиск удачен, то осуществляем процесс макрогенерации–при этом при обработке очередной строки она не просто подставляется, а проверяется:
является ли она инструкцией базового языка – перенос без изменений
1.3.2. обращение к другому макросу – поиск в ТИМ. Если неудачен – вносится в дополнительный список, удачен, но неопределен – заносится в список, удачен и определен – запоминаем адрес возврата и фактические параметры обработки макроса и снова переходим в режим макрогенерации. Также необходимо проверить зацикленность вызовов макроса.
2хпросмотровая схема:
Аналогично только без дополнительных списков
1й проход: находятся все макроопределения
2й проход: подстановка
Дополнительные возможности макропроцессора
генерация уникальных меток
M1 MACRO
...
L1 ADD R1, R2
...
JMP L!
MEND
обработка параметров
2 способа:
-позиционный способ задания параметров
M1 MACRO Par1, Par2, Par3
- ключевой
M2 MACRO Buffer=20, Size=16, Stack
???
M1 MACRO Fzn1,Fzn2,,,,,,,,Fzn10
M2 MACRO Buffer=20
3. управление процессом макрогенерации
16.04.
Лекция № 10
1я группа директив: if, else, endif.
...
M1 MACRO ...
...
IF <условие>
...
ELSE ...
ENDIF
...
MEND
2я группа: директивы циклической макроподстановки: ENDW, WHILE
...
M1 MACRO
...
WHILE <условие>
...
ENDW
...
MEND
...
3ю директивы условных и безусловных переходов
AIF <условие> .L1
AGO .L2
...
M1 MACRO
...
AIF <условие> .L1
...
AGO .L2
...
.L1 ...
...
.L2 ...
...
MEND