test$ nasm -v NASM version 2.16.02rc2 compiled on Oct 12 2023 test$ cat test.asm %assign slot 26 %push %ifdef INIT %define %$entry26 %define entry26 %endif %define foo bar %ifdef A %define %$entry%[slot] foo %elifdef B %xdefine %$entry%[slot] foo %elifdef C %define entry%[slot] foo %elifdef D %xdefine entry%[slot] foo %endif %define foo qux %fatal %$entry26 entry26 test$ nasm test.asm -DA test.asm:20: fatal: qux entry26 test$ nasm test.asm -DB test.asm:20: fatal: bar entry26 test$ nasm test.asm -DC test.asm:20: fatal: %$entry26 qux test$ nasm test.asm -DD test.asm:20: fatal: %$entry26 bar test$ nasm test.asm -DINIT -DA test.asm:11: error: `%define' expects a macro identifier test.asm:20: fatal: test$ nasm test.asm -DINIT -DB test.asm:13: error: `%xdefine' expects a macro identifier test.asm:20: fatal: test$ nasm test.asm -DINIT -DC test.asm:20: fatal: qux test$ nasm test.asm -DINIT -DD test.asm:20: fatal: bar test$