B BL BLX BX详解
(2011-12-06 17:10:29)
标签:
杂谈 |
分类: arm硬件开发 |
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
是一个表达式,可以为以下几种类型:
对于
对于
对于