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 блоках.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОК