1、B:无条件转移

B指令是最简单的跳转指令。一旦遇到一个B指令,ARM处理器将立即跳转到给定的目标地址,从那里继续执行。注意,存储在跳转指令中的实际值是相对当前PC值的一个偏移量,而不是绝对地址,它的值由汇编器来计算。

例:B Label ;程序无条件跳转到标号Label处执行

2、BL:转移并连接,用于呼叫一个子程序,返回地址被存储在LR中

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

以下指令:

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

  1. BX:带状态切换的跳转

BX指令使程序跳转到指令中指定的地址执行程序。

  1. BLX:带连接和状态切换的跳转

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

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

最基本的无条件跳转指令有两条:

B Label ;跳转到 Label 处对应的地址

BX reg ;跳转到由寄存器 reg 给出的地址

呼叫子程序时,需要保存返回地址,正确的指令是:

BL Label ;跳转到 Label 对应的地址,并且把跳转前的下条指令地址保存到 LR

BLX reg  ;跳转到由寄存器 reg 给出的地址,并根据 REG 的 LSB 切换处理器状态,

;还要把转移前的下条指令地址保存到 LR

执行这些指令后,就把返回地址存储到 LR(R14)中了,从而才能使用”BX LR”等形式返回。

注:

R14:连接寄存器(LR)

R15:程序计数器(PC)

STM32--汇编语言:子程呼叫与无条件跳转指令B、BL、BX和BLX相关推荐

  1. 16.控制转移指令(条件跳转指令、比较条件跳转指令、多条件分支跳转指令、无条件跳转指令)

    目录 1.控制转移指令 1.1 条件跳转指令 1.2 比较条件跳转指令 1.3 多条件分支跳转指令 1.4 无条件跳转指令 1.控制转移指令 控制转移指令分为如下图所示的5种,其中比较指令在算术指令中 ...

  2. arm64汇编b带条件跳转指令和bl跳转带返回ret指令

    文章目录 ret返回指令 B 跳转指令 BL 带返回的跳转指令 B指令可以接上后缀,用来和cmp比较后待条件的跳转 ret返回指令 cpu遇到ret之后,会把lr赋值给pc,这样cpu执行了pc里的地 ...

  3. 【Android 逆向】函数拦截实例 ( ② 插桩操作 | 保存实际函数入口 6 字节数据 | 在插桩的函数入口写入跳转指令 | 构造拼接桩函数 )

    文章目录 前言 一.函数拦截需要的几个参数 二.插桩前先保存实际函数入口 6 字节数据 三.在插桩的函数入口写入跳转指令 | 构造拼接桩函数 前言 [Android 逆向]函数拦截实例 ( 函数拦截流 ...

  4. 【Android 逆向】函数拦截 ( GOT 表拦截 与 插桩拦截 | 插桩拦截简介 | 插桩拦截涉及的 ARM 和 x86 中的跳转指令 )

    文章目录 一.GOT 表拦截与插桩拦截 二.插桩拦截简介 三.插桩拦截涉及的 ARM 和 x86 中的跳转指令 一.GOT 表拦截与插桩拦截 函数拦截有 222 种方式 : 使用 GOT 表进行函数拦 ...

  5. 西门子stl语言指令_STEP7项目的JL跳转指令你会用吗?

    引言: 昨天测试一个PDF文档中的STL程序,照着录入后,竟然在程序保存的时候就出错了,不能保存!研究了一下发现是JL指令的使用造成的,所以今天写篇文章来聊一下,STEP7项目STL编程中的JL 跳转 ...

  6. 014-无条件跳转指令jmp+

    l  无条件跳转指令jmp l   goto指令 l   优化后的指令     l  标志寄存器PSW 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 OF DF IF T ...

  7. 汇编——跳转指令与分支结构(包括OF和CF的溢出判断)

    汇编中的循环和分支结构 虽然我们没有花里胡哨的函数和对象等等,但是我们也可以实现循环和分支结构(其实就是if_else) 我们要知道一个问题,就是代码是一行行执行的. (其实这个是说给我这样的被Ver ...

  8. arm指令bne.w改成b,即无条件跳转

    近期逆向一个程序,需要把bne.w改成b,无条件跳转.由于ios逆向不像pc上,可以在od里直接改汇编指令,这篇文章给了我很大的帮助.通过memory write 修改后,验证可行后,再用ultrae ...

  9. Keils uVision5环境下STM32汇编语言程序开发

    目录 一.如何在MDK5中建立工程 1建立工程 1.1创建工程 1.2选择芯片STM32F103RC ​ 1.3运行环境选择,在CMSIS下选择CORE:Device下选择Startup 2.添加文件 ...

最新文章

  1. 自动驾驶汽车可用于处理急转弯的 3 种技术
  2. 深圳大学面向全球引进高精尖缺人才!
  3. 无人驾驶还有多久才能全面推开?
  4. Grub及MBR修复
  5. smart700iev3 程序下载设置_西门子PLC基础:S7-200 SMART PLC程序下载
  6. python线性加权模型_局部加权之线性回归(1) - Python实现
  7. 71. Merge k Sorted Lists
  8. [Swift]LeetCode480. 滑动窗口中位数 | Sliding Window Median
  9. Linux环境下实现简单进度条
  10. 本地时间转utc时间_有关机器时间、UTC时间、本地时间的总结
  11. C#解析HL7协议数据2.X
  12. 通信原理及系统系列7—— 什么是码间串扰
  13. Java 和python多态区别_python面向对象之多态鸭子类型与Java的比较
  14. 事务Transaction的理解(一)
  15. python求幂_python 求幂
  16. nginx: [emerg] unknown directive “锘? in******
  17. CentOS 压缩解压
  18. 开机provision应用
  19. 使用spilt截取文件名后缀时出现的问题
  20. Soapui报错There are currently 1 running SoapUI MockServices解决办法

热门文章

  1. MobileNetv2-SSDLite训练自己的数据集
  2. 瓜子二手车 翻页 csv
  3. 如何让腾讯微博搜索排名靠前?
  4. 数值实验与计算机模拟,数值模拟方法与实验方法的优缺点
  5. 每日一学 | 2021-05-18 | Power BI 学习笔记00、01、02
  6. 啊哈C——学习2.6一起来找茬
  7. 会计基础(一):记账基础 - 复式记账法
  8. 手机安装Linux系统(Ubuntu)
  9. 0011【冥想】87天冥想感悟汇总
  10. 杨辉三角 帕斯卡三角形(C语言)