Определение внутренних меток
Пусть необходимо в программе вычислять значения максимального элемента из двух заданных. В этом случае макросы предпочтительнее процедур
MACRO MAX x, y, z
push eax
mov eax, x
cmp eax, y
jle m1
mov eax, y
m1:
mov z, eax
pop eax
endm
Пусть в программе необходимо многократно использовать этот макрос. При повторном его использовании будет ошибка в связи с повтором метки. Для обеспечения использования внутренних меток используется директива LOCAL <Метка>, в этом случае компилятор формирует каждый раз уникальную метку. Директива LOCAL должна быть записана сразу после заголовка м/о.
Пример. Составить программу для определения максимального элемента для трех чисел с помощью макросов.
IDEAL
p386
MODEL fLat
extrn ExitProcess:proc
dataseg
x dd 3
y dd 5
z dd 2
u dd ?
codeseg
begin:
MACRO max x, y, z
local m1
push eax
mov eax, x
cmp eax, y
jge m1
mov eax, y
m1:
mov z, eax
endm
max [x], [y], [u]
max [u], [z], [u]
call ExitProcess
end begin
При компиляции программы формируются метки вида ??0000, ??0001 и т.д.