Программирование на Ассемблере


Определение внутренних меток


Пусть необходимо в программе вычислять значения максимального элемента из двух заданных. В этом случае макросы предпочтительнее процедур

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 и т.д.



Содержание раздела