首页 > 编程语言 >ARM汇编 --- 跳转指令 B、BL、BX、BLX的区别

ARM汇编 --- 跳转指令 B、BL、BX、BLX的区别

时间:2023-09-29 12:22:56浏览次数:51  
标签:BLX BL 地址 指令 跳转 BX ARM

ARM的跳转指令介绍

跳转指令用于实现程序流程的跳转,在 ARM 程序中有两种方法可以实现程序流程的跳转:

(1) 使用专门的跳转指令。

(2) 直接向程序计数器 PC 写入跳转地址值。

通过向程序计数器 PC 写入跳转地址值,可以实现在 4GB 的地址空间中的任意跳转,在跳转之前结合使用 MOV LR , PC 等类似指令,可以保存将来的返回地址值,从而实现在 4GB 连续的线性地址空间的子程序调用。

ARM的4个跳转指令

ARM 指令集中的跳转指令可以完成从当前指令向前或向后的 32MB 的地址空间的跳转,包括以下 4 条指令:

(1) B 跳转指令

(2) BL 带返回的跳转指令

(3) BLX 带返回和状态切换的跳转指令

(4) BX 带状态切换的跳转指令

B 指令

B 指令的格式为:

B<c> <label> 

B 指令是最简单的跳转指令。一旦遇到一个 B 指令,ARM 处理器将立即跳转到给定的目标地址,从那里继续执行。注意存储在跳转指令中的实际值是相对当前 PC 值的一个偏移量,而不是一个绝对地址,它的值由汇编器来计算(参考寻址方式中的相对寻址)。它是 24 位有符号数imm24,左移两位(因为ARM指令4字节对齐,最低两位固定为0,不占用32bit的指令,这样寻址范围可以扩大两位),表示的有效偏移为 26 位(前后32MB 的地址空间)。imm32 表示的是 label 的值。

 

 

BL 指令

BL 指令的格式为:

BL<c> <label>

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

 

BX 指令

BX 指令的格式为:

BX<c> <Rm>

BX 指令跳转到指令中所指定的目标地址, 目标地址处的指令既可以是ARM 指令,也可以是Thumb指令。因为 BX 指令会根据 Rm 的最低两位切换处理器的状态(ARM指令是4字节对齐,最低两位固定为0,Thumb指令是2字节对齐,最低一位固定为0)

BX 对应的伪代码如下:

 

 

BLX

是 BL 和 BX 的功能集合

 

参考文档:

ARM Architecture Reference Manual ARMv7-A and ARMv7-R edition.pdf

 

标签:BLX,BL,地址,指令,跳转,BX,ARM
From: https://www.cnblogs.com/god-of-death/p/17736895.html

相关文章

  • Stable Diffusion扩散模型
    人像生成模型1.模型理论基础扩散模型(DiffusionModel):1.1DiffusionModel原理首先,DenoiseModel 需要一个起始的噪声图像作为输入。这个噪声图像可以是完全随机的,也可以是一些特定的模式(如 高斯分布)或者形状。-接下来,随着denoise的不断进行,图像的细节信息会逐渐浮现......
  • [ABC256Ex] I like Query Problem
    原题传送门题意区间整除,区间推平,查询区间和。大家好啊,我喜欢暴力乱搞,所以这题我用暴力乱搞AC了。首先观察到操作\(1\)的性质:首先保证了除数至少为\(2\)(不然是\(1\)或者\(0\)的话也没啥意义啊),所以对一个数不断进行操作的话,每次数的大小至少会减少一半,减小到\(0\)之......
  • Mybatis-Flex核心功能之@Table
    1、能干啥?@Table主要是用于给Entity实体类添加标识,用于描述实体类和数据库表的关系,以及对实体类进行的一些功能辅助。例如:数据库有一张tb_member的会员表这时候我们就可以使用@Table去绑定对应的实体和表的对应关系2、怎么玩?先看看@Table注解内部结构public@in......
  • Go每日一库之70:termtables
    简介今天学个简单点的,termtables处理表格形式数据的输出。适用于随时随地的输出一些状态或统计数据,便于观察和调试。是一个很小巧的工具库。我在学习dateparse库时偶尔见遇到了这个库。快速使用本文代码使用GoModules。创建目录并初始化:$mkdirtermtables&&cdtermtable......
  • Problem - 616C - Codeforces
    Problem-616C-CodeforcesC.TheLabyrinth如果是直接对\(*\)去跑dfs或者bfs的话无疑是会超时的既然如此,那我们可以去对\(.\)跑搜索,将各个连通的\(.\)块标号并计算出连通块内的点的数量,然后去遍历\(*\)的时候只需要上下左右跑一下计算即可啊,在\(bfs\)或\(dfs\)的时......
  • k8s版本v1.24,kubectl top pod 报错:error: Metrics API not available
    k8s版本:v1.24.4kubectltoppod报错:error:MetricsAPInotavailable报错Readinessprobefailed:HTTPprobefailedwithstatuscode:500vimcustom-resources.yamlapiVersion:v1kind:ServiceAccountmetadata:labels:k8s-app:metrics-servername:metrics......
  • k8s版本v1.24,kubectl top pod 报错:error: Metrics API not available
    k8s版本:v1.24.4kubectltoppod报错:error:MetricsAPInotavailable报错Readinessprobefailed:HTTPprobefailedwithstatuscode:500vimcustom-resources.yamlapiVersion:v1kind:ServiceAccountmetadata:labels:k8s-app:metrics-servername:metrics-......
  • weblogic乱码报错解决思路
    目录1.集群备份weblogic虚拟机快照备份2.查看主节点控制台面板状态3.尝试启动程序失败4.查看162.主节点日志5.发现程序中乱码6.修改乱码名称7.尝试启动,新的报错还是显示乱码8.修改乱码9.点击更新程序,继续报错9.1依然是乱码10.更新,程序部署路径,换新程序,11.删除程序,处理程序中的乱码......
  • cobbler自动安装系统
    目录一、cobbler1.介绍2.cobbler配置文件详解3.cobbler服务端部署4.新建虚拟机,内存最低2G起步,不选镜像,开机安装一、cobbler1.介绍Cobbler是一个快速网络安装linux的服务,而且在经过调整也可以支持网络安装windows。使用简单的命令即可完成PXE网络安装环境的配置,同时还可以管理DHCP、......
  • ansible-主机清单
    1.ansible清单-默认默认位置/etc/ansible/hosts查看主机清单文件[root@localhostansible]#cathosts[webservers]192.168.235.152[outlocatservers]43.143.98.52[localhost]127.0.0.1[webservers],[outlocatservers],[localhost]是主机名2.ansible主机清单-自......