教材:嵌入式系统及应用,罗蕾、李允、陈丽蓉等,电子工业出版社
目录:
ARM 嵌入式微处理器指令集
ARM 处理器实现的指令集
- 32 位的 ARM 指令集和 16 位的 Thumb 指令集
- ARM 处理器允许在 ARM 状态和 Thumb 状态之间进行切换和互操作,保证用户在运算性能和代码密度之间的选择的灵活性
- 采用 16 位的 Thumb 指令集优势在于更高的代码密度和降低功耗
- Thumb 指令集的代码一般是由编译器生成的而不是手动编写出来的
ARM 指令集的特点
- 所有 ARM 指令都是 32 位定长的,内存中地址以 4 字节边界对齐,故 ARM 指令的有效地址最后两位总是 00
- 加载 - 存储架构。除了专门的加载 - 存储类型的指令可以访问内存外,其余指令使用处理器内部寄存器的数据和立即数作为操作数
- 提供一次加载和存储多个寄存器的指令:LDM 和 STM。这样,发生过程调用和中断处理时,只用一条指令即可把多个寄存器的内容保存到内存堆栈中
- CPU 内核硬件中提供了桶形移位器,移位操作可以内嵌在其他指令中,即一条指令可在一个指令周期完成一个移位操作和一个 ALU 操作
- 所有 ARM 指令都可以条件执行,其指令高四位是条件指示位,根据 CPSR 寄存器中的N、Z、C、V 决定该指令是否执行
Thumb 指令集的约束
- 不使用条件执行,标志总是根据指令结果设置
- 源寄存器和目标寄存器相同
- 不使用 R8~R12 寄存器,只用低端寄存器
- 指令中出现的常量有大小的限制
- 不在指令中使用内嵌的桶形移位器
ARM v4T 架构指令体系
条件执行和标志位
- 通过在指令后加上合适的条件标志位,ARM 指令可以条件执行
- 减少了分支指令数目,增强了指令的代码密度和性能
- 比较指令(CMP)默认影响标志位
- 数据处理指令默认不会影响条件标志位,但是可在指令后加“S”(或其它条件位的)后缀,以实现标志位的置位
- 条件执行的例子
- 指令条件码
数据处理指令
- 算术运算: ADD ADC SUB SBC RSB RSC
- 逻辑运算: AND ORR EOR BIC
- 比较运算: CMP CMN TST TEQ
数据传送: MOV MVN
通用语法:
<Operation>{<cond>}{S} Rd, Rn, Operand2
- 第二个操作数可以为一个寄存器或者一个立