微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > Thumb指令集之: Thumb跳转指令

Thumb指令集之: Thumb跳转指令

时间:08-30 来源:3721RD 点击:

该指令类似于ARM指令集的BL <target_addr>集的BL <target_addr>。

11.3.4 带状态切换的跳转指令BX

(1)编码格式

带状态切换的跳转指令BX的编码格式如图11.5所示。

图11.5 BX指令的编码格式

BX指令用于ARM和Thumb程序之间的调用。

(2)指令的语法格式

BX <Rm>

其中<Rm>为目标地址寄存器,包含程序的跳转地址。BX指令的目标地址寄存器可以是r0~r15中的任意寄存器。

注意

如果Rm[1:0]=0b10,不满足ARM指令的内存对齐方式。指令的执行结果不可预知。如果该指令使用r15作为目标寄存器,其操作方式和使用其他寄存器相同。

(3)指令操作的伪代码

T Flag=Rm[0]

PC=Rm[31:1]<<1

(4)ARM指令集中的BX指令

ARM指令集中的BX指令和Thumb指令集中的BX指令相差较大,它们分别为不同方向的跳转。当r15作为目的寄存器使用时,要特别注意该指令在两个指令集中的区别。

11.3.5 带返回链接的无条件跳转指令BLX(2)

(1)编码格式

带返回链接的无条件跳转指令BLX(2)的编码格式如图11.6所示。

图11.6 BLX(2)指令的编码格式

该BLX(2)指令用于ARM和Thumb子程序间的相互调用。程序状态字的T标志位根据目的寄存器的bit[0]位而改变。

(2)指令的语法格式

BLX <Rm>

其中<Rm>为目标地址寄存器,r0~r14寄存器均可以做为目标地址寄存器。

注意

如果在此指令中使用r15作为目的寄存器,指令的执行结果不可预知。

此指令只在ARMv5版本以上指令集中被支持。

(3)指令操作的伪代码

LR = (address of the instruction after this BLX)|1

T Flag = Rm[0]

PC = Rm[31:1]<<1

11.3.6 Thumb指令集中跳转指令举例

下面的例子程序综合使用了各种跳转指令,通过该例可以对Thumb状态下程序的非连续执行有更深入的了解。

B label ;无条件跳转到Label地址

BCC label ;如果进位标志为0,则跳转

BEQ label ;如果零标准位置1,则跳转

BL func ;子程序调用

Func

… ;子程序体

MOV PC,LR ;子程序返回

BX r12 ;跳转到r12寄存器中保存的地址

在执行此例中的BX r12时,如果r12的bit[0]=0,则处理器进入ARM状态执行,否则继续执行Thumb代码。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top