在ARM中有两种方式可以实现程序的跳转,一种是使用分支指令直接跳转,另一种则是直接向PC寄存器赋值实现跳转。 分支指令有以下三种: 分支指令B; 带链接的分支指令BL; 带状态切换的分支指令BX。 分支指令——B指令,该指令跳转范围限制在当前指令的±32M字节地址内(ARM指令为字对齐,最低2位地址固定为0)。指令格式如下:B{cond} Label 应用示例: B WAITA ; 跳转到WAITA标号处 … WAITA … 带链接的分支指令——BL指令适用于子程序调用,使用该指令后, 下一条指令的地址被拷贝到R14(即LR) 连接寄存器中,然后跳转到指定地址运行程序。跳转范围限制在当前指令的±32M字节地址内。指令格式如下: BL{cond} Label 带状态切换的分支指令——BX指令,该指令可以根据跳转地址(Rm)的最低位来切换处理器状态。 ARM指令为字对齐,最低2位地址固定为0。指令格式如下: BX{cond} Rm 例: ADRL R0,ThumbFun+1 ;将Thumb程序的入口地址加1存入R0 BX R0 ; 跳转到R0指定的地址, ;并根据R0的最低位来切换处理器状态