Электрокамин Dimplex Cambrige
Физика атомного реактора Сопротивление материалов Математика решение задач Информатика Атомная энергетика безопасность Электротехника и электроника
Знакомство с ассемблером Формат оператора Директивы Макроопределение Макровызовы Макросы с параметрами Процесс ассемблирования Компиляция Задачи компоновщика Динамическая компоновка

Макроопределение, макровызов и макрорасширение

Макроопределение — это способ дать имя фрагменту кода. После того как макрос определен, программист может вместо фрагмента кода писать имя макроса. В сущности, макрос — это просто имя фрагмента кода. В листинге 7.4 приведена ассемблерная программа для Pentium 4, которая дважды меняет местами значения переменных Р и Q. Вот как выглядит основная цепочка операторов:

MOV ЕАХ.Р MOV EBX.Q MOV Q.EAX MOV Р.ЕВХ

В листинге 7.5 эта последовательность определяется как макрос SWAP.

Листинг 7.4. Смена значений переменных Р и Q без использования макроса

M0V ЕАХ.Р MOV EBX.Q MOV Q.F.AX M0V Р.ЕВХ

M0V ЕАХ.Р MOV EBX.Q MOV Q.EAX M0.V Р.ЕВХ

Листинг 7.5. Смена значений переменных Р и Q с использованием макроса

SWAP MACRO

MOV ЕАХ.Р MOV EBX.Q MOV Q.EAX MOV P.EBX ENDM

SWAP

SWAP

Хотя в разных языках ассемблера определение макроса выглядит немного по-разному, во всех оно состоит из одних и тех же базовых частей:

+ заголовок макроса, в котором дается имя определяемого макроса;

+ текст, в котором приводится тело макроса;

+ директива, которая завершает определение (например, ENDM).

Когда ассемблер наталкивается на макроопределение в программе, он сохраняет его в таблице макроопределений для последующего использования. Всякий раз, когда в программе в качестве кода операции будет появляться макрос (в нашем примере — SWAP), ассемблер заменит его телом макроса. Использование имени макроса в качестве кода операции называется макровызовом, а его замена телом макроса — макрорасширением.

Макрорасширение происходит в ходе ассемблирования, а не во время выполнения программы. Этот момент очень важен. Программы, приведенные в листингах 7.4 и 7.5, порождают один и тот же машинный код. По программе на машинном языке невозможно определить, использовались макросы при ее порождении или нет. В полученной программе никаких признаков макросов не остается.


Экспертные системы и экспертный анализ Архитектура компьютера Уровень ассемблера