ARM 指令集
ARM 指令集分为 6 类:跳转指令、数据处理指令、程序状态寄存器( PSR)传输指令、
Load/Store 指令、协处理器指令和异常中断产生指令。
1、 跳转指令
1) B 跳转指令
BL 带返回的跳转指令
例:B Lable ;程序跳转到标号 Lable 处
BCC Lable ;当 CPSR 寄存器中的 C 条件标志为 1 时,程序跳转到 Lable 处
BL func_1 ;程序转到子程序 func_1 处执行,同时将当前的 PC 保存到 LR
2) BLX(1) 带返回和状态切换的跳转指令 (无条件执行指令 条件码为 AL)
BLX(1)指令从 ARM 指令集跳转到指令中指定的目标地址,并将程序状态切换
为 Thumb 状态,该指令同时将 PC 寄存器的内容复制到 LR 寄存器中。
指令的语法格式 BLX <target_address>
3) BLX(2) 带返回和状态切换的跳转指令 (无条件执行指令 条件码为 AL)
BLX(2)指令从 ARM 指令集跳转到指令中指定的目标地址,目标地址的指令可
以是 ARM 指令,也可以是 Thumb 指令。目标地址放在指令中的寄存器<Rm>中,
该地址的 bit[0]值为 0,目标地址处的指令类型由 CPSR 中的 T 位决定。该指令同时
将 PC 寄存器的内容复制到 LR 寄存器中。
指令的语法格式 BLX{<cond>}<Rm>
其中: <cond>为指令执行的条件码。当<cond>忽略时指令为无条件执行
<Rm>该寄存器中为跳转的目标地址。当<Rm>寄存器的 bit[0]值为 0 时,目
标地址的指令为 ARM 指令;当<Rm>寄存器的 bit[0]值为 1 时,目标地址的
指令为 Thumb 指令。当<Rm>寄存器为 R15 时,会产生不可预知的结果。
4) BX 带状态切换的跳转指令
指令的语法格式 BX{<cond>}<Rm>
其中 <cond>为指令执行的条件码。当<cond>忽略时指令为无条件执行
2、 数据处理指令
1) MOV 数据传送指令
指令的语法格式: MOV{<cond>}{S} <Rd>,<shifter_operand>
MOV 指令可以完成以下功能:
将数据从一个寄存器传送到另一个寄存器中
将一个常数传送到一个寄存器中
实现单纯的移位操作。左移操作可以实现将操作数乘以 2
n
当 PC 寄存器作为目标寄存器时可以实现程序跳转。这种跳转可以实现子程
序调用以及子程序中返回。
当 PC 寄存器作为目标寄存器且指令中 S 位被设置时,指令在执行跳转操作的
同时,将当前处理器模式的 SPSR 寄存器内容被复制到 CPSR 中。这样指令
MOVS PC,LR 可以实现从某些异常中断中返回。
2) MVN 数据取反转送指令
指令的语法格式: MVN{<cond>}{S} <Rd>,<shifter_operand>
MVN 指令由以下用途:
向寄存器中传送一个负数
生成为掩码
去一个数的反码