ARM处理器使用的分支指令有B、BL、BX、BLX,各指令区别如下:
1、B:Branch,无条件跳转。
通过将PC的值设置为<address>来指示下条指令的地址,这是一种永久性分支,不会再返回。
该指令主要用于循环中,或者将程序的控制权交给另一部分代码。
……
B fwd
MOV r0, r0 ;这条指令将不会得到执行
fwd:
2、BL:Branch with Link,带链接的跳转。
将PC的值设置为下条指令的地址,并将BL指令后的地址存放到LR中,从而在子程序执行完成之后返回到原来的位置。
……
BL calc
……
calc: ADD r0, r1, r2
BX lr ;返回到先前的位置
3、BX:Branch with eXchange,跳转并交换。
允许程序在ARM状态和Thumb状态之间切换
4、BLX:Branch with Link and eXchange,带链接和交换的跳转。
该指令可以进行ARM/Thumb状态切换,并更新LR寄存器,允许返回到先前的位置。