在嵌入式开发中,
汇编程序常常用于非常关键的地方,
比如系统启动时初始化,
进出中断时
的环境保护,恢复等对性能有要求的地方。
ARM
指令集可以分为六大类,分别为数据处理指令、Load/Store
指令、跳转指令、程序状态
寄存器处理指令、协处理器指令和异常产生指令。
ARM
指令使用的基本格式如下:
〈opcode〉{〈cond〉}{S}
〈Rd〉,〈Rn〉{,〈operand2〉}
opcode
操作码;指令助记符,如
LDR、STR
等。
cond
可选的条件码;执行条件,如
EQ、NE
等。
S
可选后缀;若指定“S”,则根据指令执行结果更新
CPSR
中的条件码。
Rd
目标寄存器。
Rn
存放第
1
操作数的寄存器。
operand2
第
2
个操作数
arm
的寻址方式如下:
立即寻址
寄存器寻址
寄存器间接寻址
基址加偏址寻址
堆栈寻址
块拷贝寻址
相对寻址
这里不作详细描述,可以查阅相关文档。
数据处理指令
Load/Store
指令
程序状态寄存器与通用寄存器之间的传送指令
转移指令
异常中断指令
协处理器指令
在
S3C2410、S3C2440
的数据手册中对各种汇编指令有详细的描述;这里只对较常见的作写
介绍。
1、相对跳转指令:b、bl
这两条指令的不同之处在于
bl
指令除了跳转之外,
还将返回地址(bl
的下一条指令的地址)
保存在
lr
寄存器中。
这两条指令的可跳转范围是当前指令前后
32M。
b
funa
....
funa:
b
funb
....