汇编命令
ARM GNU汇编命令格式
label: instruction or directive or pseudo-instruction @comment
(2) instruction or directive or pseudo-instruction:指令或伪指令字段。
由上一节介绍的ARM汇编指令或者用于GNU编译器编译过程的伪指令构成。
(3)@comment:是注释字段。“@”以后的所有字符在编译过程中均被认为是注释标识符,不参与编译过程。可以使用“@”或使用C语言风格的注释(/*……*/)来代替分号“; ”。
专有符号
“:” 用于定义标号
“@” 当前位置到行尾为注释字符。
“#” 整行注释字符。
“; ” 新行分隔符。
“#”或“$” 直接操作数前缀。
“.arm” 以arm格式编译,同code32
“.thumb” 以thumb格式编译,同code16
“.code16” 以thumb格式编译
“.code32” 以arm格式编译
常用伪指令
(Assemble Indirectives更多信息)
(1).align absexpr1, absexpr2
/*存储边界对齐命令。获取符合对齐方式要求的最近地址号,absexpr1对齐方式,为4, 8,16或32bit,absexpr2空余单元的填充值,缺省填0*/
(2).code [16|32] @指定指令编码长度为Thumb指令|ARM指令
(3).data subsection @定义数据段,段名为subsection
(4).end @汇编文件结束标志,常省略。
(5).equ symbol, expression @定义常量表达式
(6).global symbol
@声明全局符号(函数名),用于外部程序跳转或调用。
(7).macro/.endm @定义宏代码, .macro表示开始, .endm表示结束。
预编译宏
计算机科学里的宏(Macro),是一种批量批处理的称谓。一般说来,宏是一种规则或模式,或称语法替换 ,用于说明某一特定输入(通常是字符串)如何根据预定义的规则转换成对应的输出(通常也是字符串)。这种替换在预编译时进行,称作宏展开。
讲解:
1、宏的处理阶段:预编译
2、
.ifdef <symbol> @rugged之前有符号symbol的定义,那么.ifdef和.endif之间代码被编译
.endif
3、对于以下类似于函数似的宏,其重点是替换。
.macro <name> {<arg_1>} {,<arg_2>}...{<arg_N>}
.endm
.exitm