ARM的跳转指令可以从当前指令向前或向后32MB的地址空间跳转。这类跳转指令有以下4种。
● B:B{L}{} <target_address>
_start:
MOV R5, #1
MOV R6, #2
B final
MOV R7, #3 //skipped
MOV R8, #4 //skipped
final:
● BL:带返回的跳转指令。
_start:
MOV R5, #1
MOV R6, #2
BL final //LR = 0x0c
MOV R7, #3 //skipped
MOV R8, #4 //skipped
final:
● BLX:带返回和状态切换的跳转指令。
//BLX(1)。BLX(1)指令从ARM指令集跳转到指令中指定的目标地址,并将程序状态切
//换为Thumb状态,该指令同时将PC寄存器的内容复制到LR寄存器中
_start:
MOV R5, #1
MOV R6, #2
BLX final //LR = 0x0c
MOV R7, #3 //skipped
MOV R8, #4 //skipped
final:
//thum code
//BLX(2)指令从ARM指令集跳转到指令中指定的目标地址,目标地址的指令
//可以是ARM指令,也可以是Thumb指令。目标地址放在指令中的寄存器中,该地址的bit[0]值为0,目标地址处的
//指令类型由CPSR中的T位决定。该指令同时将PC寄存器的内容复制到LR寄存器中。
_start:
MOV R5, #1
MOV R6, #2
MOV R1, #final
BLX R1 //LR = 0x0c
MOV R7, #3 //skipped
MOV R8, #4 //skipped
final:
//thumb or arm
● BX:带状态切换的跳转指令。
//BX指令跳转到指令中指定的目标地址,目标地址处的指令可以是ARM指令,也可以是Thumb指令。目标地址值为指
//令的值和0x FFFFFFFE做与操作的结果,目标地址处的指令类型由寄存器的bit[0]决定。
_start:
MOV R5, #1
MOV R6, #2
MOV R1, #final
BX R1 //LR = 0x0c
MOV R7, #3 //skipped
MOV R8, #4 //skipped
final:
//thumb or arm