AT&T中的macro

1750阅读 1评论2009-12-12 jiangwen127
分类:

7.50 .macro
本命令.macro.endm命令允许您定义宏来生成汇编输出。例如,下面的语句定义了一个宏
sum
,这个宏把一个数字序列放入内存。

.macro sum from=0, to=5
.long \from
.if \to-\from
sum "(\from+1)",\to
.endif
.endm
使用上述定义,'SUM 0,5'语句就等于输入下面的汇编语句:
.long 0
.long 1
.long 2
.long 3
.long 4
.long 5

.macro macname
.macro macname macargs ...
开始定义一个名为macname的宏。如果您的宏需要使用参数,则在宏的名字后指定他们的名
字,参数之间用逗号或空格分隔。您可以为任意的参数提供参数的缺省值,只需要在参数
后使用“=deflt”,。例如,下列都是合法的宏定义语句:
.macro comm
定义一个名为comm,不使用参数。
.macro plus1 p, p1
.macro plus1 p p1
两个语句都声明要定义一个名为plus1的宏,这个宏需要两个参数,在宏定义体内,使用'
\p'
'\p1'来引用参数的值。
.macro reserve_str p1=0 p2
声明要定义一个名为reserve_str的宏,使用两个参数。第一个参数有缺省值,第二个没有
缺省值。宏定义完成后,您可以通过‘reserve_str a, b’(宏体中‘\p1’引用a的值,‘
\p2’
引用b)或通过‘reserve_str ,b’(‘\p1’使用缺省值,在此为‘0’,‘\p2’
b的值)来调用这个宏。

当调用一个宏时,您既可以通过位置指定参数值,也可以通过关键字指定参数值。例如,
‘sum 9,17’
和‘sum to=17, from=9’是等价的。
.endm
标志宏定义体的结束。
.exitm
提前从当前宏定义体中退出。
\@
这个伪变量其实是as维护的一个计数器,用来统计执行了多少个宏。您可以通过使用\
@
把这个数字复制到您的输出中,但仅限于在宏定义体中使用。

上一篇:字符串前缀匹配 trie boj1212
下一篇:bochs配置文件的一些说明

文章评论