分支指令可以改变程序的执行流程或者调用子程序.这种指令使得一个程序可以使用子程序,if-then-else结构以及循环.执行流程的改变迫使程序计数器pc指向一个新的地址.
B{<cond>} label: 跳转指令,pc=label
BL{<cond>} label: 带返回的跳转,pc=label,lr=BL后面的第一条指令地址
BX{<cond>} Rm: 跳转并切换状态,pc=Rm&0xfffffffe,T=Rm&1
BLX{<cond>} label | Rm: 带返回的跳转并切换状态,pc=label,T=1;pc=Rm&0xfffffffe,T=Rm&1,lr=BLX后面的第一条指令地址
    地址label以一个有符号的相对于pc的偏移量保存在指令中,必须被限制在分支指令的约32MB的范围内.大多数汇编语言通过使用地址标号来隐藏分支指令编码的细节.地址标号放在一行的开始处,汇编器会记录该行指令的地址,用于计算跳转的偏移量.
    带链接的跳转指令和B指令相似,不过BL指令还要把一个返回地址写到链接寄存器lr.BL可用于子程序调用.使用Bl指令跳转到一个子程序,再通过拷贝链接寄存器lr到pc来返回.
    分支切换指令BX使用一个存储在寄存器Rm中的绝对地址,只要用于跳转到Thumb代码或从Thumb状态返回.cpsr中的T位由分支寄存器(Rm)的最低位来更新.同样BLX指令也是用分支寄存器的最低位来更新cpsr中的T位,并要把返回地址写入链接寄存器lr.