Алгоритм обработки макровызова. — КиберПедия 

Поперечные профили набережных и береговой полосы: На городских территориях берегоукрепление проектируют с учетом технических и экономических требований, но особое значение придают эстетическим...

Историки об Елизавете Петровне: Елизавета попала между двумя встречными культурными течениями, воспитывалась среди новых европейских веяний и преданий...

Алгоритм обработки макровызова.

2023-01-01 25
Алгоритм обработки макровызова. 0.00 из 5.00 0 оценок
Заказать работу

1. Поиск имени макроса в ТИМ. Если не нашли – ошибка. Если нашли, считываем указатели на начало – переменная fi, и конец макроса – переменная li, в ТМО.

2. Сопоставляем фактические и формальные параметры. Если фактические параметры не соответствуют формальным - ошибка. Если фактические параметры указаны, верно, заносим их в ТЛП.

3. Вызываем процедуру предварительного просмотра макроса, которая заносит адреса макрометок в ТЛП. Если процедура нашла ошибку – выход с ошибкой.

4. Переменной i (номер текущей строки ТМО) присваиваем значение fi;

5. Организуем цикл со следующим предусловием: i<li

5.1.  Вызываем функцию по обработке строки ТМО с номером i. Если функция вернула код ошибки – выход с ошибкой.

5.2.  Увеличиваем i на единицу.

 


 

Алгоритм функции обработки строки ТМО.

1. По номеру текущей обрабатываемой строки (i), извлекаем строку из ТМО.

2. Если в поле МКОП имя макроса – ошибка.

3. Если директива macro – вызывается функция обработки вложенного макроопределения. Выход из функции.

4. Если директива AIF:

4.1.  Поиск операнда (макрометки) в ТЛП.

4.1.1.  Если поиск неудачен – ошибка.

4.1.2.  Если поиск удачен, запоминаем адрес макрометки (номер строки в ТМО).

4.2.  Если условие истинно, то переменной i присваиваем значение операнда, уменьшенное на единицу. Выход из функции.

5. Директива AGO:

5.1.  Поиск операнда в ТЛП.

5.1.1. Если поиск неудачен – ошибка.

5.1.2. Если нашли, то переменной i присваиваем значение операнда, уменьшенное на единицу. Выход из функции.

6. Директива INC. Увеличиваем значение операнда на единицу. Выход из функции.

7. Директива DEC. Уменьшаем значение операнда на единицу. Выход из функции.

8. Если поле МКОП содержит команду Ассемблера:

8.1. Проверяем строку на наличие параметров макроса. Если нашли заменяем соответствующим значением параметра.

8.2. Проверяем строку на наличие уникальных меток. Если нашли, поиск в ТЛП:

8.2.1. Если поиск удачен, добавляем к имени метки уже присвоенный уникальный индекс;

8.2.2. Если поиск неудачен, добавляем имя метки в ТЛП, присваиваем ей уникальный индекс, и добавляем к имени метки в строке ее, только что полученный, уникальный индекс.

8.3. Вывод строки в выходной файл. Выход из функции.

9.  Поле МКОП содержит неизвестную команду – ошибка.

 


Руководство пользователя.

Разработанная программа работает в двух режимах: консольном и визуальном. Если строка параметров пуста программа запускается в визуальном режиме. Для запуска макропроцессора в консольном режиме необходимо наличие хотя бы одного параметра запуска.

Работа в консольном режиме.

Запуск макропроцессора:

Project1 [ /if <имя файла> ] [ /mof <имя файла>] [ /aof <имя файла> ] [ /? ]

Параметры:

/if  <имя файла> - задает имя входного файла, по умолчанию input.txt;

/mof <имя файла> - задает имя выходного файла макроассемблера, по умаолчанию macroOutput.txt;

/aof  <имя файла> - задает имя выходного файла ассемблера, по умолчанию asmOutput.txt;

/? - вывод справочной информации.

После выполнения программы, помимо выходных файлов, будут сформированы следующие файлы:

· «errors.txt»: будет содержать список ошибок выявленных макропроцессором;

· «TIM.txt»: полученная таблица имен макросов;

· «TMO.txt»: полученная таблица макроопределений.

 

 


 

Работа в визуальном режиме.

   

Интерфейс программы в визуальном режиме организован следующим образом:

Блок под номером 1 служит для вывода содержимого входного файла.

В блоке под номером 2 отображается таблица макроопределений.

Блок под номером 3 служит для вывода результата обработки входного файла макропроцессором.

Блок под номером 4 служит для отображения макрометок внутри обрабатываемого на данный момент макроса (только в пошаговом режиме).

При пошаговой работе процедуры макровызова в 5-ом блоке отображается текущее состояние таблицы локальных переменных.

В блоке под номером 6 выводится таблица имен макросов.

Блок под номером 7 является интерфейсом управления макроассемблером и основным ассемблером.

В блоке под номером 8 отображаются ошибки, обнаруженные в ходе работы макроассемблера и основного ассемблера.

В блоке под номером 9 отображаются коды операций ассемблера.

В блоке под номером 10 отображается таблица символических имен, обнарежнных ассемблером.

В блоке под номером 11 отображена промежуточная таблица ассемблирования.

В блоке под номером 12 отображается результирующий объектный файл, полученный после ассемблирования.

Работа программы в визуальном режиме организована следующим образом. При запуске программы, входным файлом по умолчанию является файл «input.txt». Для загрузки другого входного файла необходимо нажать на кнопку «Загрузить» и выбрать новый входной файл.

Для пошаговой работы макропроцессора, необходимо отметить пункт «пошаговый режим».

Для запуска макропроцессора необходимо нажать кнопку «Первый м/п». Если был установлен пошаговый режим работы, то за один шаг будет обработана только одна строка входного файла. Для обработки следующей строки необходимо нажать кнопку «Шаг».

После завершения первого прохода и при отсутствии ошибок, становится доступным второй проход, для запуска которого необходимо нажать кнопку «Второй проход м/п». Второй проход работает аналогично первому.

При каждом запуске макропроцессора выходной файл сохраняется в файле «macroOutput.txt». Кроме того, в файлам “TIM.txt” и “TMO.txt” сохраняются таблица имен макросов и таблица макроопределений соответственно.

Если 2-й проход макропроцессора был завершен без ошибок, то становится доступным 1-й проход ассемблера. Для его выполнения необходимо нажать на кнопку «Первый проход ассемблера».

После завершения 1-го прохода ассемблирования и в случае отсутствия ошибок становится доступных 2-й проход ассемблера. Для его выполнения требуется нажать на кнопку «Второй проход ассемблера»

Если ассемблирование было завершено без ошибок, то будет сгенерирован объектный модуль, который сохраняется в файл (по умолчанию в asmOutput.txt).


 

Описание макроязыка.

Определение макроса.

Имя макроса должно начинаться с символа «$». Параметры макроса перечисляются через запятую. Все параметры должны начинаться с символа «&».

Пример:

$m1 macro &a, &b = 0

...

mend

Вызов макроса.

Описание: в макровызове параметры должны перечисляться через запятую.

Пример:

$m1 &b = 1, &a = 0

Команды макрогенерации.

Все макрометки должны начинаться с символа «#».

 

Пример:

#MM mov ax, 0

 

Условия в командах AIF, IF являются любым допустимым арифметическим выражением над числами и локальными переменными макроса. Значение выражения отличное от нуля интерпретируется как логическая истина, в противном случае как логическая ложь.

 

Команда AIF.

Формат: AIF <условие> AGO <макрометка>

Описание: Совершает переход на макрометку если условие истинно.

Пример:

AIF (&A==&B) AGO #MM

 

Команда AGO.

Формат: AGO <макрометка>

Описание: Совершает переход на макрометку.

Пример:

AGO #MM

 

Команда LOCAL.

Формат:

LOCAL <имя переменной> [= <выражение>]

Описание: определяет переменную и инициализирует её, если задано выражение.

Пример:

LOCAL &a = 0

 

Команда SET.

Формат:

SET <имя переменной> = <выражение>

Описание: вычисляет значение выражения и присваивает его переменной.

Пример:

SET &a = 0

 

Команда LOCAL.

Формат:

LOCAL <имя переменной> [= <выражение>]

Описание: определяет переменную и инициализирует её, если задано выражение.

Команда INC.

Формат: INC <операнд>

Описание: увеличивает значение операнда на единицу. Операндами являются локальные переменные макроса.

Пример:

INC &A

 

Команда DEC.

Формат: DEC <операнд>

Описание: уменьшает значение операнда на единицу. Операндами являются локальные переменные макроса.

Пример:

DEC &A


Поделиться с друзьями:

Типы оградительных сооружений в морском порту: По расположению оградительных сооружений в плане различают волноломы, обе оконечности...

Кормораздатчик мобильный электрифицированный: схема и процесс работы устройства...

Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначен­ные для поддерживания проводов на необходимой высоте над землей, водой...

Адаптации растений и животных к жизни в горах: Большое значение для жизни организмов в горах имеют степень расчленения, крутизна и экспозиционные различия склонов...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.019 с.