在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的最低位来切换处理器状态
阅读(3781) | 评论(0) | 转发(0) |