6.6. Директива LOCAL в макросах с групповыми аргументами

У локальных меток в макросах есть ещё одно полезное свойство. Если директива LOCAL находится внутри блока FORWARD или REVERSE, то уникальное имя метки сгенерируется для каждого аргумента из группы, и в последующих блоках FORWARD и/или REVERSE для каждого аргумента будет использована соответствующая ему метка:

macro string_table [string]

{

 forward           ;таблица указателей на строки

  local addr       ;локальная метка для строки

  dd addr          ;указатель на строку

 forward           ;строки

  addr db string,0 ;создаём и завершаем нулём

}

string_table 'aaaaa','bbbbbb','5'

получим:

dd addr?00000001

dd addr?00000002

dd addr?00000003

addr?00000001 db 'aaaaa',0

addr?00000002 db 'bbbbbb',0

addr?00000003 db '5',0

Другой пример с блоком REVERSE:

macro a [x]

{

 forward

  local here

  here db x

 reverse

  dd here

}

a 1,2,3

будет:

here?00000001 db 1

here?00000002 db 2

here?00000003 db 3

dd here?00000003

dd here?00000002

dd here?00000001

Как видно, метки используется с соответствующими аргументами и в FORWARD и в REVERSE блоках.