常用的 ARM 编译环境有 2 种:
1>ADS/SDT IDE:ARM 公司开发,使用了 CodeWarrior 公司的编译器.
2>集成了 GNU 开发工具的 IDE 开发环境;它由 GNU 的汇编器 as,交叉汇编器 gcc 和连接器 id 组成.
ADS 编译环境下的 ARM 伪操作和宏指令,可参考北航出版社的<<ARM 微控制器基础与实践》
(周立功)这里主要讲述 ARM GNU 常用汇编语言。
4.1 ARM GNU 常用汇编伪指令介绍
1.abort
.abort: 停止汇编
.align absexpr1,absexpr2:
以某种对齐方式,在未使用的存储区域填充值. 第一个值表示对齐方式,4, 8,16 或 32. 第二个
表达式值表示填充的值.
2.if...else...endif
.if (.ifdef symbol // )
.else
.endif: 支持条件预编译
.if 有多个变种:
.ifdef symbol @判断 symbol 是否定义
.ifc string1,string2 @字符串 string1 和 string2 是否相等,字符串可以用单引号括起来
.ifeq expression @判断 expression 的值是否为 0
.ifeqs string1,string2 @判断 string1 和 string2 是否相等,字符 串必须用双引号括起来
.ifge expression @判断 expression 的值是否大于等于 0
.ifgt absolute expression @判断 expression 的值是否大于 0
.ifle expression @判断 expression 的值是否小于等于 0
.iflt absolute expression @判断 expression 的值是否小于 0
.ifnc string1,string2 @判断 string1 和 string2 是否不相等, 其用法跟.ifc 恰好相反。
.ifndef symbol, .ifnotdef symbol @判断是否没有定义 symbol, 跟.ifdef 恰好相反
.ifne expression @如果 expression 的值不是 0, 那么编译器将编译下面的代码
.ifnes string1,string2 @如果字符串 string1 和 string2 不相 等, 那么编译器将编译下面的代码.
3.include
.include "file": 包含指定的头文件, 可以把一个汇编常量定义放在头文件中.
4.comm
.comm symbol, length:在 bss 段申请一段命名空间,该段空间的名称叫 symbol, 长度为
length. Ld 连接器在连接会
为它留出空间.
5.data
.data subsection: 说明接下来的定义归属于 subsection 数据段.
6.equ
.equ symbol, expression: 把某一个符号(symbol)定义成某一个值(expression).该指令并不
分配空间.
7.global
.global symbol: 定义一个全局符号, 通常是为 ld 使用.
8.ascii
.ascii "string": 定义一个字符串并为之分配空间.