(1) MACRO、MEND及MEXIT
MACRO伪操作标识宏定义的开始,MEND标识宏定义的结束。MERIT用于从宏中跳转出去。用MACRO和MEND定义的一段代码,成为宏定义体,这样在程序中就可通过宏名多次调用该代码段来完成相应的功能。
语法格式
MACRO ;宏定义开始
$lable jump ;宏的名称为jump,有2个参数a1和a2
…
$lable.loop1 ;$lable.loopl为宏体的内部标号
…
BGE $lable.loop1
$lable.loop2 ;$lable.loop2为宏体的内部标号
BL $a1 ;参数$a1为一个子程序的名称
BGT $lable.loop2
…
ADR $a2
…
MEND
在程序中调用该宏:
exam jump sub,det ;调用宏jump,宏的标号为exam
;参数1为sub,参数2为det
程序被汇编后,宏展开的结果:
…
examloop1 ;用exam代替$lable构成标号
;examloop1
…
examloop2
BL sub ;参数1的实际值为sub
BGT examloop2
ADR det ;参数2的实际值为det
示例27 用宏伪操作完成测试-跳转操作举例
在ARM中完成测试-跳转操作需要2条指令,下面定义一条宏指令完成测试-跳转操作。
MACRO ;宏定义开始
$lable TestAndBranch$ds,$re,$aa ;宏的名称为TestAndBranch
;有3个参数
$lable CMP$re,#0
B$aa $ds
MEND ;宏定义结束
在程序中调用该宏:
testTestAndBranch nzero,R0,NE ;调用宏
程序被汇编后,宏展开的结果是:
test CMP R0,#0
BNE nzero