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: 带链接的跳转。 首先将当前指令的下一条指令地址保存在LR寄存器,然后跳转的lable。通常用于调用子程序,可通过在子程序的尾部添加mov  pc, lr 返回。

BL 指令的格式为:

BL{条件} 目标地址

BL 是另一个跳转指令,但跳转之前,会在寄存器R14 中保存PC 的当前内容,因此,可以通过将R14 的内容重新加载到PC 中,来返回到跳转指令之后的那个指令处执行。该指令是实现子程序调用的一个基本但常用的手段。以下指令:

BL Label ;当程序无条件跳转到标号 Label 处执行时,同时将当前的 PC 值保存到 R14 中

3、BX: 带状态切换的跳转。最低位为1时,切换到Thumb指令执行,为0时,解释为ARM指令执行。

BX 指令的格式为:

BX{条件} 目标地址

BX 指令跳转到指令中所指定的目标地址,目标地址处的指令既可以是ARM 指令,也可以是Thumb指令。

4、BLX:  带链接和状态切换的跳转。结合了BX与BL功能。

BLX 指令的格式为:

BLX 目标地址

BLX 指令从ARM 指令集跳转到指令中所指定的目标地址,并将处理器的工作状态有ARM 状态切换到Thumb 状态,该指令同时将PC 的当前内容保存到寄存器R14 中。因此,当子程序使用Thumb 指令集,而调用者使用ARM 指令集时,可以通过BLX 指令实现子程序的调用和处理器工作状态的切换。

同时,子程序的返回可以通过将寄存器R14 值复制到PC 中来完成。

操作:

1、BL 和 BLX 指令可将下一个指令的地址复制到lr(r14,链接寄存器)中。

2、BX 和 BLX 指令可将处理器的状态从 ARM 更改为 Thumb,或从 Thumb 更改为ARM。

3、BLX label 无论何种情况,始终会更改处理器的状态。

4、BX Rm 和 BLX Rm 可从 Rm 的位 [0]推算出目标状态。

5、如果 Rm 的位 [0] 为 0,则处理器的状态会更改为(或保持在)ARM 状态。如果 Rm 的位 [0] 为 1,则处理器的状态会更改为(或保持在)Thumb 状态。

ARM指令B BL BLX BX区别相关推荐

  1. ARM指令集--B BL BLX BX

    B 指令的格式为: B{条件} 目标地址 B 指令是最简单的跳转指令.一旦遇到一个 B 指令,ARM 处理器将立即跳转到给定的目标地址,从那里继 续执行 B Label :程序无条件跳转到标号 Lab ...

  2. B BL BLX BX详解

    B.BL.BX.BLX 和 BXJ 跳转.带链接跳转.跳转并切换指令集.带链接跳转并切换指令集.跳转并转换到 Jazelle 状态. 语法 op1{cond}{.W} label op2{cond}  ...

  3. arm32和arm64常用指令B BL BLX机器码计算

    现在大部分手机cpu架构是ARM v7-A和ARMV8-A,,在ARM-v7A中常使用32位ARM指令集并且支持thumb指令集与arm的切换,而在ARMV8中使用的是64位ARM指令集且不再有thu ...

  4. ARM中LDR B BX BL BLX指令的研究

    原来的文章有点乱,所以稍微整理了一下有用的要点: (1)  LDR作为伪指令的格式:LDR 寄存器, = 数字常量/Label 如:LDR   R2,=0x55aa ; 表示将0x55aa送入寄存器R ...

  5. arm B和BL指令浅析

    B或BL指令引起处理器转移到"子程序名"处开始执行.两者的不同之处在于BL指令在转移到子 程序执行之前,将其下一条指令的地址拷贝到R14(LR,链接寄存器).由于BL指令保存了下条 ...

  6. ARM指令和Thumb指令的区别

    一.现在先区分下ARM指令集与Thumb指令集        Thumb 指令可以看作是 ARM 指令压缩形式的子集,是针对代码密度的问题而提出的,它具有 16 位的代码密度但是它不如ARM指令的效率 ...

  7. thumb指令和arm指令

    参考https://www.embedded.com/introduction-to-arm-thumb/ 一.为什么一个芯片需要thumb和arm两套指令集 许多复杂的功能在复杂指令集(CISC)处 ...

  8. 【ARM学习笔记】ARM汇编指令:B、BL、BX、BLX的区别

    文章目录 1 ARM的跳转指令介绍 2 ARM的4个跳转指令 2.1 B 指令 2.2 BL 指令 2.3 BLX 指令 2.4 BX 指令 3 更多分享 1 ARM的跳转指令介绍 跳转指令用于实现程 ...

  9. 汇编跳转指令B、BL、BX、BLX 和 BXJ的区别

    已针对原链接错误翻译并更正                                                    跳转指令用于实现程序流程的跳转,在 ARM 程序中有两种方法可以实现程 ...

最新文章

  1. python数据可视化利用_利用pyecharts实现python数据可视化
  2. WPF 中使用附加属性,将任意 UI 元素或控件裁剪成圆形(椭圆)
  3. html防替换资源,Webpack中有没有替换html静态资源的插件
  4. texture 纹理(贴图)
  5. php gbk json_encode,php中json_encode处理gbk与gb2312中文乱码问题的解决方法
  6. 5375亿元的x86市场:戴尔946亿、HPE 682亿、浪潮517亿、联想345亿、华为256亿、思科218亿、新华三204亿
  7. 计算机管理教学 (cmi) 包括( )等功能,计算机管理教学(CMI)的未来
  8. 一维树桩数组区间更新、区间查询
  9. 【天光学术】项目管理论文:房地产公司项目管理运营提升措施探究(节选)
  10. JavaScript getMonth() 函数用法
  11. 针式PKM,不是简单的“文档管理器”
  12. Optimistic Concurrency VS. Pessimistic Concurrency Control
  13. 短视频SDK测试tips
  14. TradingView--Charting Library是什么
  15. docker部署jupyterhub
  16. 【可视化分析案例】用python分析Top100排行榜数据
  17. AP热点设置与STA连接路由器设置
  18. java绕过加密密码_Java实现简单密码加密功能
  19. Centos7安装ab(Apache Benchmark)测试工具及使用
  20. Java中矩阵运算Array2DRowRealMatrix(math3的使用)

热门文章

  1. MySQL DQL加强知识整理
  2. java 单词出现次数_Java统计英文句子中出现次数最多的单词并计算出现次数的方法...
  3. Redis系列(五)Redis持久化机制
  4. Openoffice安装中文字体
  5. C#毕业设计——基于C#+asp.net+Access的网上同学录系统设计与实现(毕业论文+程序源码)——网上同学录系统
  6. AnyDesk 远程桌面控制、替代TeamViewer
  7. 二十五、Spring项目六(1)
  8. 3DMAX好学吗?如何学习3DMAX?
  9. Windows Phone实例开发:快递查询助手 - [WP开发]
  10. 花 100 天学习人工智能之后,我得出了 5 个结论