Я хочу сделать так, чтобы макрос получал название константы, а не её значение. И дальше присвоить этой константе нужное значение. Т.е.: Код (Text): %macro def 1 %assign %1 5 %endmacro def y mov eax,y В таком виде всё работает, но! Если значение y уже определено, то передаваться будет не имя константы, а её значение. Т.е. если перед def y написать %assign y 0, конструкция полетит. Но это ещё не всё! Я хочу, чтобы такому макросу можно было передавать локальные константы: Код (Text): %macro dodef 0 %assign %%y 0 def %%y mov eax,%%y %endmacro Манипуляции с передачей имени в виде строки (с использованием %deftok и т.п.) не помогают. Вариант с использованием %undef перед вызовом макроса не хочу (хоть он и работает... вот если бы внутри макроса можно было сделать %undef ): Код (Text): %macro def 1 %assign %1 5 %endmacro %assign y 0 %undef y def y mov eax,y Использование %[%1] вместо %1 тоже не даёт никакого эффекта (да и не должно, т.к. это наоборот принуждение использовать именно значение). На данный момент у меня получается сделать только вот так: Код (Text): %macro def 1 %assign %1_ 5 %endmacro %assign y_ 0 def y mov eax,y_ Но это тоже не вот прям красота, т.к. придётся использовать "лишний" символ. Если бы можно было писать def y? и удалить лишний последний символ... может, можно как-то? Использовать def 'y' я согласен, но как превратить это в идентификатор внутри макроса? (%deftok, повторюсь, преобразует результат в значение). И смогу ли я тогда передавать локальные константы? Как можно решить эту задачку? В TASM/MASM с этим проблем вообще нет... p.s. Специально использую слово "константа" во избежание каламбура, хоть они и называются в NASM "однострочными макросами"...