B、BL、BX、BLX
跳转、带链接跳转、跳转并切换指令集、带链接跳转并切换指令集、跳转并转换到
语法
op1{cond}{.W}
op2{cond}
其中:
op1 是下列项之一:
B 跳转。
BL 带链接跳转
BLX 带链接跳转并切换指令集。
op2 是下列项之一:
BX 跳转并切换指令集。
BLX 带链接跳转并切换指令集。
BXJ 跳转并转换为
cond 是一个可选的条件代码。
.W 是一个可选的指令宽度说明符,用于强制要求在
label 是一个程序相对的表达式。
Rm 是一个寄存器,包含要跳转到的目标地址。
操作
所有这些指令均会引发跳转,或跳转到
BL
BX
BLX
BX
如果
如果
BXJ
指令可用性和跳转范围
下表给出了可在
Table
指令 | ARM | | 16 | 32 | |||||
B | ±32MB | (所有) | ±2KB | (所有 | ±16MB | (所有 | |||
B{cond} | ±32MB | (所有) | –252 | (所有 | ±1MBa | (所有 | |||
BL | ±32MB | (所有) | ±4MB | (所有 | ±16MB | (所有 | |||
BL{cond} | ±32MB | (所有) | - | | - | - | |||
BX | 可用 | (4T,5) | 可用 | (所有 | 使用 | (所有 | |||
BX{cond} | 可用 | (4T,5) | - | | - | - | |||
BLX | ±32MB | (5) | ±4MB | (5T) | ±16MB | (除 | |||
BLX | 可用 | (5) | 可用 | (5T) | 使用 | (所有 | |||
BLX{cond} | 可用 | (5) | - | | - | - | |||
BXJ | 可用 | (5J,6) | - | | 可用 | (除 | |||
BXJ{cond} | 可用 | (5J,6) | - | | - | - | |||
[1使用 [2这是一个指令对。 |
扩展跳转范围
机器级指令
Thumb-2
您可以使用
B.W
对于向前引用,不带
Thumb-2EE
这些指令可在
条件标记
这些指令不更改标记。
体系结构
有关这些指令在每种体系结构中的可用性的详细信息。
示例
ARM/thumb之间
在同一状态时直接:BL
返回也直接用MOV
不在同一状态要注意以下几点:
1.
2.
3.
;Check
;这一段是为了统一处理器工作状态和软件编译方式(16位编译环境使用tasm.exe编译)
;arm有两种工作状态:
;(1)32位,该状态执行字对准的arm指令;
;(2)16位,该状态执行半字对准的Thumb指令
;不同的工作状态,编译器编译方式也不同
GBLL
[
THUMBCODE
CODE32
|
THUMBCODE
]
MACRO
MOV_PC_LR
[
bx
|
mov
]
MEND
MACRO
MOVEQ_PC_LR
[
bxeq
|
moveq
]
MEND
GBLA
GBLL
GBLS
语法
<gblx>
其中:
<gblx> 是
variable
是变量的名称。variable
SETA
SETL
SETS
语法
variable
其中:
<setx> 是
variable 是由
expr 是一个表达式,可以为以下几种类型:
对于
对于
对于