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维护的一个计数器,用来统计执行了多少个宏。您可以通过使用\
@把这个数字复制到您的输出中,但仅限于在宏定义体中使用。