Cтраница 4
Этот блок ( рис. 3.18) получает управление от блока управления трансляцией при обнаружении в программе макроопределения. Обработка начинается с занесения параметра из поля названия, если он есть, в таблицу позиционных параметров. Имя макрокоманды, следующее за полем названия, переносится в таблицу макрокоманд. Если в операторе прототипа имеются позиционные параметры, то они непосредственно следуют за именем макрокоманды. Эти параметры последовательно переносятся в таблицу позиционных параметров. Одновременно подсчитывается число позиционных параметров. Появление параметра, после которого следует знак равенства или пробел, служит сигналом окончания формирования таблицы позиционных параметров. [46]
![]() |
Программа расчета коэффициента для приведения базовой линии. [47] |
На рис. V-6 приведен пример макрокомпиляции этой программы. В этой программе первая команда, состоящая из буквы D и имени макрокоманды, обычно производит аннулирование ранее используемой макрокоманды с тем же именем. Вторая команда начинается с буквы S, за которой следует имя новой макрокоманды, состоящее не более чем из четырех символов. [48]
![]() |
Программа копирования, использующая индексный режим адресации. [49] |
Макрокоманды являются удобным средством, позволяющим сократить число операторов в исходном тексте программы, сделать ее структуру более понятной и ускорить составление программы. Они дают возможность программисту заменить последовательность операторов одним оператором. Каждой макрокоманде соответствует ее макроопределение, которое содержит последовательность операторов и связывает с ней имя макрокоманды и набор аргументов. [50]
Значение символа зависит от его использования в программе. Символ в поле операции может относиться к любому из трех вышеприведенных типов. Для определения типа и значения символа, находящегося в поле операции, Макроассемблер проводит поиск в таблицах в следующем порядке: 1) таблица имен макрокоманд; 2) таблица постоянных символов; 3) таблица символов, определенных пользователем. [51]
Совершенно особый случай представляют собой системы для редактирования изображения. Прежде всего обычно их гораздо легче реализовать, чем другие виды систем. Простая система для редактирования изображения должна быть лишь несколько большей, чем диалоговый вариант одного из компиляторов дисплейных файлов, описанных в гл. Пользователь вводит с клавиатуры имя макрокоманды и некоторые параметры, и в дисплейном файле производятся соответствующие изменения. [52]
![]() |
Программа копирования, использующая индексный режим адресации. [53] |
MACRO указываются имя макрокоманды и список формальных аргументов. Чтобы выделить имя макрокоманды, его рекомендуется отделять от списка формальных аргументов пробелом, а последние следует отделять друг от друга запятыми. В частном случае список формальных аргументов может отсутствовать. ENDM может быть пустым или содержать имя макрокоманды. Определение макрокоманды может располагаться в любом месте исходного модуля, но оно всегда должно предшествовать ее вызову. [54]
На рис. V-6 приведен пример макрокомпиляции этой программы. В этой программе первая команда, состоящая из буквы D и имени макрокоманды, обычно производит аннулирование ранее используемой макрокоманды с тем же именем. Вторая команда начинается с буквы S, за которой следует имя новой макрокоманды, состоящее не более чем из четырех символов. [55]
Требуемая метка - это символ, которым будет вызвана макрокоманда. Если макрокоманда именована также, как существующая директива ассемблера или мнемоника, будет выдано предупреждение. Описание макрокоманды состоит из трех частей: верхний колонтитул, который назначает имя макрокоманды и определяет фиктивные параметры; тело макроса, которое состоит из прототипа или основных инструкций; признак конца. Верхний колонтитул - директива MACRO, ее метка и список фиктивных параметров. Тело содержит образец стандартных исходных инструкций. [56]