Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СПО лекции.docx
Скачиваний:
32
Добавлен:
01.08.2019
Размер:
92.68 Кб
Скачать

Использование макрокоманд внутри макроса

...

M1 MACRO

...

MEND

...

M2 MACRO

...

M1

MEND

...

M2

Изменения вносимые в основную схему макроассемблирования:

  1. обрабатываем очередную строку исходного текста. Если в поле мнемокод встретилась команда базового языка – переносим без изменения. Если встретилась директива MACRO, то процессор переключается в режим макроопределения. Если встретилось обращение к макросу, процессор переключается в режим макрогенерации. При этом из таблицы ТМО извлекается тело макроса с подстановкой фактических параметров. При этом анализируется поле мнемокод операции. Если встретилась инструкция базового языка, переносим на выход без изменения. Если встретилось обращение к другому макросу, то осуществляем поиск в ТИМ. Поиск неудачен – ошибка, поиск удачен – то запоминаем строку возврата(т е следующая после макрокоманды строка) список фактических параметров того макроса, которая обрабатывает и переключаемся на макрогенерацию нового макроса. Перед тем приступить к макрогенерации нового макроса - выполнить проверку на наличие его в создаваемой последовательности макросов(в списке вызова).

Изменения в ТМО:

Рис1

ДЗ НАПИСАТЬ АЛГОРИТМ ОБРАБОТКИ МАКРОКОМАНД ВНУТРИ МАКРОСА НА СЛУЧАЙ НЕОПЕРЕЖАЮЩЕГО ОПИСАНИЯ(2Х ОДНОПРОСМОТРОВУЮ СХЕМУ)

ДЗ

Алгоритм обработки макрокоманд внутри макроса (неопережающее описание)

1просмотровая схема:

Организуем цикл по обработке строк исходного текста программы, каждая строка обрабатывается следующим образом:

    1. если в строке встретилась инструкция базового языка(Ассемблера), то она переносится в выходной файл без изменений.

    2. если встретилась директива MACRO, то в таблицу ТИМ заносится имя макроса, а ТМО переносим тело макроса без изменений и устанавливаем указатель на начало и конец этого макроса в ТМО.

    3. если встретилось обращение к макросу, то осуществляем поиск в ТИМ: если поиск неудачен, то в ТИМ заносим имя макроса и с ним связывается дополнительный список, содержащий строку вызова макроса, если поиск удачен, то осуществляем процесс макрогенерации–при этом при обработке очередной строки она не просто подставляется, а проверяется:

      1. является ли она инструкцией базового языка – перенос без изменений

1.3.2. обращение к другому макросу – поиск в ТИМ. Если неудачен – вносится в дополнительный список, удачен, но неопределен – заносится в список, удачен и определен – запоминаем адрес возврата и фактические параметры обработки макроса и снова переходим в режим макрогенерации. Также необходимо проверить зацикленность вызовов макроса.

2хпросмотровая схема:

Аналогично только без дополнительных списков

1й проход: находятся все макроопределения

2й проход: подстановка

Дополнительные возможности макропроцессора

  1. генерация уникальных меток

M1 MACRO

...

L1 ADD R1, R2

...

JMP L!

MEND

  1. обработка параметров

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]