新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 跳转指令之:跳转指令B及带连接的跳转指令BL

跳转指令之:跳转指令B及带连接的跳转指令BL

作者:时间:2013-09-13来源:网络收藏

本文引用地址:http://www.eepw.com.cn/article/257056.htm

3.指令操作的伪代码

指令操作的伪代码如下面程序段所示。

IfconditionPassed{cond}then

IfL==1then

LR=addressoftheinstructionafterthebranchinstruftion

PC=PC+(SignExtend(signed_immed_24)2)

4.指令的使用

L指令用于实现子程序调用。子程序的返回可以通过将LR寄存器的值复制到PC寄存器来实现。下面三种指令可以实现子程序返回。

·Xr14(如果体系结构支持X指令)。

·MOVPC,r14。

·当子程序在入口处使用了压栈指令:

STMFDr13!,{registers>,r14},

可以使用指令。

LDMFDr13!,{registers>,PC}

将子程序返回地址放入PC中。

汇编器通过以下步骤计算指令编码中的signed_immed_24。

(1)将PC寄存器的值作为本的基地址值。

(2)从跳转的目标地址中减去上面所说的跳转的基地址,生成字节偏移量。由于指令是字对齐的,该字节偏移量为4的倍数。

(3)当上面生成的字节偏移量超过-33554432~+33554430时,不同的汇编器使用不同的代码产生策略。

(4)否则,将指令编码字中的signed_immed_24设置成上述字节偏移量的bits[25∶2]。

注意

在一些RISC体系结构的处理器中,存在延时跳转(delayedbranch)模式,即在程序执行跳转到目标地址之前,程序会执行之后的指令。但在体系中,没有这种延时跳转机制。

5.指令举例

(1)程序跳转到LAE标号处。

AE;

ADDr1,r2,#4

ADDr3,r2,#8

SUBr3,r3,r1

LABLE

SUBr1,r2,#8

(2)跳转到绝对地址0x1234处。

B0x1234

(3)跳转到子程序func处执行,同时将当前PC值保存到LR中。

BLfunc

(4)条件跳转:当CPSR寄存器中的C条件标志位为1时,程序跳转到标号LABLE处执行。

BCCLABLE

(5)通过跳转指令建立一个无限循环。

LOOP

ADDr1,r2,#4

ADDr3,r2,#8

SUBr3,r3,r1

BLOOP

(6)通过使用跳转使程序体循环10次。

MOVr0,#10

LOOP

SUBSr0,#1

BNELOOP

(7)条件子程序调用示例。

……

CMPr0,#5;如果r05

BLLTSUB1;则调用

BLGESUB2;否则调用SUB2

注意

只有SUB1不改变条件码,本例才能正确执行,因为如果BLLT执行了转移,将返回到BLGE指令。如果条件码被SUB1子程序改变,则SUB2可能又会被执行,从而达不到指令的预期效果。


上一页 1 2 下一页

评论


相关推荐

技术专区

关闭