与处理器将所有以反斜杠结尾的连续行合并为一行。
单行的宏以%define来定义;当单行的宏被扩展后还含有其他宏时,会在执行时而不是定义时展开。
%define a(x) 1+b(x)
%define b(x) 2*x
mov ax,a(8)
会被最终展开为mov ax,1+2*8,但宏b不是在定义宏a时展开的。%define定义宏是大小写敏感的,可以用%idefine来定义大小写非敏感的宏。
如果有嵌套定义的宏,与处理器只会展开第一层,保证不会进入一个死循环。
可以定义重载单行宏:
%define foo(x) 1+x
%define foo(x,y) 1+x*y
nasm可以通过传递的参数的个数来区分;但是一旦定义了不带参数的宏后,其他的foo定义都不会被接受了:
%define foo bar
你还可以在命令行中使用 -d选项来预定义宏。
你可以用%xdefine来定义嵌套宏不会被后来重定义改变的宏。
可以使用%+将单行宏中的单独记号被连接起来,组成一个更长的记号。
单行宏可以使用%undef命令来取消;在命令行上可以用-u来取消定义。
%assign和%iassign也可以定义单行宏,它不带参数,并返回一个数值型的值,该值可以以表达式的形式指定:
%assign i i+1
%strlen宏返回数值是一个字符串的长度:
%strlen len 'hello world'
上例中len被赋予字符串的长度。
%substr宏用来取子字符串:
%substr char 'xyz' 1 ;char equ 'x'