这里主要讲述ARM GNU常用汇编语言
4 ARM GNU常用汇编语言介绍
4.1 ARM GNU常用汇编伪指令介绍
1. abort
.abort: 停止汇编
.align absexpr1,absexpr2:
以某种对齐方式,在未使用的存储区域填充值. 第一个值表示对齐方式,4, 8,16或32. 第二个表达式值表示填充的值.
2. if...else...endif
.if
.else
.endif: 支持条件预编译
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": 定义一个字符串并为之分配空间.
9. byte
.byte expressions: 定义一个字节, 并为之分配空间.
10. short
.short expressions: 定义一个短整型, 并为之分配空间.
11. int
.int expressions: 定义一个整型,并为之分配空间.
12 long
.long expressions: 定义一个长整型, 并为之分配空间.
13 word
.word expressions: 定义一个字,并为之分配空间, 4bytes.
14. macro/endm
.macro: 定义一段宏代码, .macro表示代码的开始, .endm表示代码的结束.
15. req
name .req register name: 为寄存器定义一个别名.
16. code
.code [16|32]: 指定指令代码产生的长度, 16表示Thumb指令, 32表示ARM指令.
17. ltorg
.ltorg: 表示当前往下的定义在归于当前段,并为之分配空间.
4.2 ARM GNU专有符号
1. @
表示注释从当前位置到行尾的字符.
2. #
注释掉一整行.
3. ;
新行分隔符.
4.3 操作码
1. NOP
nop
空操作, 相当于MOV r0, r0
2. LDR
ldr , =
相当于PC寄存器或其它寄存器的长转移.
3.ADR
adr
ADRL
adrl
5 可执行生成说明
5.1 lds文件说明
5.1.1 主要符号说明
1. OUTPUT_FORMAT(bfdname)
指定输出可执行文件格式.
2. OUTPUT_ARCH(bfdname)
指定输出可执行文件所运行CPU平台
3. ENTRY(symbol)
指定可执行文件的入口段
5.1.2 段定义说明
1. 段定义格式
SECTIONS
{ ...
段名 :
{
内容
}
...
}