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寄存器,允許返回到先前的位置。