分支指令可改变程序的执行流程或者调用子程序。这种指令使得一个程序可以使用子程序、if-then-else的结构及循环。执行流程的改变迫使程序计数器指向一个新地址,armV5e架构指令集包括以下四种不同的分支指令。
B<cond> label 跳转 pc=label
ARM汇编器通过以下步骤计算指令编码中的signed_immed_24
1pc寄存器的值作为本次跳转的基地址
2从跳转的目标地址减去基址地址,形成字节偏移量。ARM指令是字节对其的,所以字节偏移量为4的倍数
3当上面的字节偏移量超过-33554432~33554432时不同的汇编器会给出不同的代码产生策略
4否则将指令编码中的signed_immed_24设置成上述字节偏移量的bits[25:2]
BL <cond> label 带返回的跳转 pc=label lr=BL后的第一条指令
BX <cond> Rm跳转并切换状态 pc=Rm&0xfffffffe,T=Rm&1
BLX <cond> label|Rm (brance with link exchange)带返回的跳转并切换状态 pc=label,T=1, pc=Rm&0xfffffffe,T=Rm&1 lr=BLX后面的第一条指令,labe以一个有符号的相对于pc的偏移量保存在指令中,必须被限制在分支指令的约32M(2^25)范围内