Вы можете использовать %defstr
, а затем %substr
в %rep
l oop, чтобы выяснить, какова длина первой непустой последовательности. Затем используйте %deftok
, чтобы преобразовать его обратно в токен, не являющийся строкой. Вот пример. (Обратите внимание, что переменная %$exit
необходима только для некоторых более старых версий NASM, в которых были ошибки в обработке %exitrep
.)
%macro bar 1.nolist
%push
%defstr %$string %1
%strlen %$length %$string
%assign %$ii 0
%assign %$exit 0
%rep %$length
%substr %$point %$string %$ii + 1, 1
%if %$point == 32 || %$point == 9
%assign %$exit 1
%exitrep
%endif
%ifn %$exit
%assign %$ii %$ii + 1
%endif
%endrep
%substr %$word %$string 1, %$ii
%deftok %$token %$word
%$token
%pop
%endmacro
bar nop quux xyzzy
Вот тестовый прогон:
$ nasm -E test.asm
%line 22+1 test.asm
nop
$