nasm预处理器(1)

与处理器将所有以反斜杠结尾的连续行合并为一行。

单行的宏以%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'
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值