一、ARMv7-A指令集

ARMv7-A架构是32位处理器架构。也是load/store架构,即数据处理指令操作在通用寄存器完成,只有load/store指令可以访问内存。此外ARM指令集还有一大特点,就是ARM指令集几乎所有的指令都可以增加条件码。
ARM指令集可以归为一下四类:

  1. 数据处理操作(ALU操作例如ADD);
  2. 内存操作(load/store);
  3. 控制流(循环,跳转,条件码等);
  4. 系统(协处理器,debug,模式切换等等)。

本文重点介绍控制流指令。

二、ARMv7-A控制流指令

ARMv7-A控制流指令通过分支指令( branch instruction)以及条件码实现循环,跳转等功能。
跳转可以通过两种方法实现:

  1. B跳转指令;
  2. 向PC寄存器赋值实现跳转。

三、ARMv7-A分支指令

ARMv7-A分支指令如下图所示。B指令是基本跳转指令,将PC寄存器赋值为指定地址实现跳转。
ARM体系架构—ARMv7-A指令集:控制流指令
B指令可以跟L,X后缀:

  • L后缀:链接后缀,表示将PC寄存器的下一个地址值保存到LR寄存器,PC跳转到指定地址。
  • X后缀:状态切换后缀,表示PC跳转到指定地址运行,同时将处理器状态切换为ARM或者Thumb。

B指令的指令格式如下:
ARM体系架构—ARMv7-A指令集:控制流指令

  • cond:指令条件码(EQ,NE等);
  • label:标号地址;

BL指令的指令格式如下,与B指令区别在于将PC指令地址保存到LR寄存器中:
ARM体系架构—ARMv7-A指令集:控制流指令

BX/BLX指令的指令格式如下:
ARM体系架构—ARMv7-A指令集:控制流指令
X后缀指示处理器指令从ARM切换到Thumb,或者从Thumb切换到ARM。
Rm寄存器包含跳转地址,地址bit0为0则表示切换ARM状态,为1则表示切换为Thumb状态。
ARM体系架构—ARMv7-A指令集:控制流指令

相关文章: