版权声明:署名,允许他人基于本文进行创作,且必须基于与原先许可协议相同的许可协议分发本文 (Creative Commons)
第四章 ARM指令集与寻址方式
4.1 指令集编码
所有的ARM指令都是可以有条件执行的,而Thumb指令仅有一条指令具备条件执行功能。
4.2 条件执行
ARM指令根据CPSR
中的最高四位[31:28]
来表示“条件码”,根据CPSR
中的条件位判断是否执行指令。条件码如下图:
4.3 指令分类及指令格式
ARM指令集可分为6大类:
- 数据处理指令
- Load/Store指令
- 跳转指令
- 程序状态寄存器处理指令
- 协处理器指令
- 异常产生指令
ARM指令的基本格式:
<opcode>{<cond>}{S} <Rd>,<Rn>{,<operand2>}
4.3.1 数据处理指令
ARM的数据处理指令主要完成算数和逻辑运算操作。可分为以下六类:
- 数据传送指令
- 算术指令
- 逻辑指令
- 比较指令
- 测试指令
- 乘法指令
数据处理指令只能对寄存器的内容进行操作,而不能对内存中的数据进行操作。
所有的ARM指令都可以选择使用S后缀,以使指令影响状态标志。
4.3.2 Load/Store指令
ARM的数据存取指令Load/Store
是唯一用于寄存器和存储器之间进行数据传送的指令。
ARM指令集中有三种基本的数据存取指令:
- 单寄存器存取指令
- 多寄存器存取指令
- 单寄存器交换指令
4.3.3 程序状态寄存器与通用寄存器之间的传送指令
通过“读取-修改-写回”三个步骤的操作实现修改状态寄存器,ARM中有两条指令用于程序状态寄存器与通用寄存器之间的数据传送:
- 状态寄存器到通用寄存器的传送指令(
MRS
) - 通用寄存器到状态寄存器的传送指令(
MSR
)
4.3.4 转移指令
转移指令可以实现从当前指令向前或向后32M的地址空间跳转。可分为4种。