ARM汇编伪指令 宏的用法详解
MACRO、MEND
MACRO
MACRO伪操作标识宏定义的开始,MEND标识宏定义的结束。用MACRO及MEND定义一段代码,称为宏定义体,这样在程序中就可以通过宏指令多次调用该代码段。
其中, $ label在宏指令被展开时,label会被替换成相应的符号,通常是一个标号。在一个符号前使用$表示程序被汇编时将使用相应的值来替代$后的符号。
macroname为所定义的宏的名称。
$parameter为宏指令的参数。当宏指令被展开时将被替换成相应的值,类似于函数中的形式参数,可以在宏定义时为参数指定相应的默认值。
宏定义中的$label是一个可选参数。当宏定义体中用到多个标号时,可以使用类似$label.$internallabel的标号命名规则使程序易读。
使用示例:
MACRO
$HandlerLabel HANDLER $HandleLabel ;宏的名称为HANDLER,有1个参数$HandleLabel
$HandlerLabel
sub sp,sp,#4 ;decrement sp(to store jump address)
stmfd sp!,{r0} ;PUSH the work register to stack(lr does not push because it return to original address)
ldr
ldr
str
ldmfd
MEND
;在程序中调用该宏
HandlerFIQ
HandlerIRQ
HandlerUndef
HandlerSWI
HandlerDabort
HandlerPabort
也许我们会问想格式中的[$ label]到底有什么作用?
例子:
宏的定义体:
$PM
$PM
$PM.LOOP
在程序段中的使用:(使用两次)
...
AA
...
BB
...
此时调用多次,编译器就不会出现问题,例子中的AA和BB仅仅是一个标号,用户可以自行书写,因为在宏指令呗展开时,这个符号在汇编时将使用相应的值替代
0x00000FF0是一个参数 在此处是一个立即数,用户可自行使用为变量
ARM汇编伪指令 相关文章:
- ARM汇编----伪指令LTORG(11-27)
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)