ARM体系架构—ARMv7-A指令集
一、ARMv7-A指令集
ARMv7-A架构是32位处理器架构。也是load/store架构,即数据处理指令操作在通用寄存器完成,只有load/store指令可以访问内存。此外ARM指令集还有一大特点,就是ARM指令集几乎所有的指令都可以增加条件码。
ARM指令集可以归为一下四类:
- 数据处理操作(ALU操作例如ADD);
- 内存操作(load/store);
- 控制流(循环,跳转,条件码等);
- 系统(协处理器,debug,模式切换等等)。
本文重点介绍控制流指令。
二、ARMv7-A控制流指令
ARMv7-A控制流指令通过分支指令( branch instruction)以及条件码实现循环,跳转等功能。
跳转可以通过两种方法实现:
- B跳转指令;
- 向PC寄存器赋值实现跳转。
三、ARMv7-A分支指令
ARMv7-A分支指令如下图所示。B指令是基本跳转指令,将PC寄存器赋值为指定地址实现跳转。
B指令可以跟L,X后缀:
- L后缀:链接后缀,表示将PC寄存器的下一个地址值保存到LR寄存器,PC跳转到指定地址。
- X后缀:状态切换后缀,表示PC跳转到指定地址运行,同时将处理器状态切换为ARM或者Thumb。
B指令的指令格式如下:
- cond:指令条件码(EQ,NE等);
- label:标号地址;
BL指令的指令格式如下,与B指令区别在于将PC指令地址保存到LR寄存器中:
BX/BLX指令的指令格式如下:
X后缀指示处理器指令从ARM切换到Thumb,或者从Thumb切换到ARM。
Rm寄存器包含跳转地址,地址bit0为0则表示切换ARM状态,为1则表示切换为Thumb状态。