首页 理论教育跳转指令实现流程控制

跳转指令实现流程控制

【摘要】:跳转指令用于实现程序流程的跳转。ARM指令集中的跳转指令跳转的地址空间为当前指令地址32MB。跳转指令有以下四个方面。BL指令用于子程序调用。例如:3.BLX指令BLX{cond}label或RmBLX指令从ARM指令集跳转到label或者Rm指定的地址处执行,并将处理器的工作状态由ARM状态切换到Thumb状态,同时将下一条指令的地址复制到链接寄存器R14中。例如:4.BX指令BX{cond}Rm带状态切换的跳转指令使程序跳转到指令中Rm指定的地址执行程序,Rm的第0位复制到CPSR中T位,bit[31∶1]移入PC。

跳转(Branch)指令用于实现程序流程的跳转。在ARM程序中有两种方式可以实现程序流程的跳转操作:

●直接向程序计数器PC中写入跳转地址,可以实现4GB地址空间内的任意跳转(把目标地址先存储在某一个合适的地址空间中的存储器单元,然后把这个存储器单元的值传送给PC来实现跳转。这种方法对目标地址值没有要求。但是,存储目标地址的存储单元必须在当前指令的-4KB~+4KB空间范围之内)。例如:

●使用专门的跳转指令。

ARM指令集中的跳转指令跳转的地址空间为当前指令地址32MB。跳转指令有以下四个方面。

1.B指令

B{cond}label

跳转指令使程序跳转到指定的目标地址label处执行程序。{cond}即表3.2中的助记符后缀,以下同。例如:

2.BL指令

BL{cond}label(www.chuimin.cn)

跳转链接指令BL(BL,Branch with Link)将下一条指令的地址复制到R14(LR)寄存器中(即返回地址送入连接寄存器LR),然后跳转到指定目标地址label处运行程序。BL指令用于子程序调用。例如:

3.BLX指令

BLX{cond}label或Rm

BLX(BX,Branch with Link and eXchange)指令从ARM指令集跳转到label或者Rm指定的地址处执行,并将处理器的工作状态由ARM状态切换到Thumb状态,同时将下一条指令的地址复制到链接寄存器R14(LR)中。例如:

4.BX指令

BX{cond}Rm

带状态切换的跳转指令(BX,Branch and eXchange)使程序跳转到指令中Rm指定的地址执行程序,Rm的第0位复制到CPSR中T位,bit[31∶1]移入PC。若Rm的bit[0]为1,则跳转时自动将CPSR中的标志位T置位,即把目标地址代码解释为Thumb代码;若Rm的位bit[0]为0,则跳转时自动将CPSR中的标志位T复位,即把目标地址代码解释为ARM代码。例如: