Макросы NASM и препроцессор C допускают произвольные строки.
NASM equ
константы должны быть целыми числами, но %define foo eax
или nasm '-DIMG="foo.bin"'
обе работают.
Обратите внимание, что определение макроса включает двойные кавычки. CPP позволяет легко развернуть макрос внутри двойных кавычек, но я не удосужился проверить, может ли NASM легко это сделать что.
Обычно легко создать строку в двойных кавычках, например, в Make или в любом другом месте.
;;; foo-nasm.asm NASM source
incbin IMG
# foo-gas.S GAS source (capital S gets GCC to run it through CPP)
.incbin IMG
hi.bin
содержит B8 68 69 00 00
, 32/64-битный машинный код для mov eax, 'hi'
$ gcc -c foo-gas.S -DIMG='"hi.bin"'
$ nasm -felf64 foo-nasm.asm -DIMG='"hi.bin"'
$ disas foo-gas.o
...
0000000000000000 <.text>:
0: b8 68 69 00 00 mov eax,0x6968
$ disas foo-nasm.o
...
0000000000000000 <.text>:
0: b8 68 69 00 00 mov eax,0x6968