跳转指令用于完结程序流程的跳转,在ARM程序中有两种办法能够完结程序流程的跳转:
Ⅰ.运用专门的跳转指令。
Ⅱ.直接向程序计数器PC写入跳转地址值。
经过向程序计数器PC写入跳转地址值,能够完结在4GB的地址空间中的恣意跳转,在跳转之前结合运用MOV LR,PC等相似指令,能够保存将来的回来地址值,然后完结在4GB接连的线性地址空间的子程序调用。
ARM指令会集的跳转指令能够完结从当时指令向前或向后的32MB的地址空间的跳转,包含以下4条指令:
1、 B指令
B指令的格局为:
B{条件}方针地址
B指令是最简略的跳转指令。一旦遇到一个B指令,ARM处理器将当即跳转到给定的方针地址,从那里持续履行。留意存储在跳转指令中的实践值是相对当时PC值的一个偏移量,而不是一个肯定地址,它的值由汇编器来核算(参阅寻址方法中的相对寻址)。它是24位有符号数,左移两位后有符号扩展为32位,表明的有用偏移为26位(前后32MB的地址空间)。以下指令:
B Label;程序无条件跳转到标号Label处履行
CMP R1,#0;当CPSR寄存器中的Z条件码置位时,程序跳转到标号Label处履行
BEQ Label
2、 BL指令
BL指令的格局为:
BL{条件}方针地址
BL是另一个跳转指令,但跳转之前,会在寄存器R14中保存PC的当时内容,因而,能够经过将R14的内容从头加载到PC中,来回来到跳转指令之后的那个指令处履行。该指令是完结子程序调用的一个根本但常用的手法。以下指令:
BL Label;当程序无条件跳转到标号Label处履行时,一起将当时的PC值保存到R14中
3、 BLX指令
BLX指令的格局为:
BLX方针地址
BLX指令从ARM指令集跳转到指令中所指定的方针地址,并将处理器的作业状况有ARM状况切换到Thumb状况,该指令一起将PC的当时内容保存到寄存器R14中。因而,当子程序运用Thumb指令集,而调用者运用ARM指令集时,能够经过BLX指令完结子程序的调用和处理器作业状况的切换。一起,子程序的回来能够经过将寄存器R14值复制到PC中来完结。
4、 BX指令
BX指令的格局为:
BX{条件}方针地址
BX指令跳转到指令中所指定的方针地址,方针地址处的指令既能够是ARM指令,也能够是Thumb指令。