跳转指令可以跳转到标号的下一条指令,本质就是修改了PC寄存器的值。(标号并非指令,只是用来定位,相当于记录了当前位置的下一条指令的地址)

@ 这里的MAIN就是一个标号
MAIN:            MOV R1, #1@ 这里的FUNC就是一个标号
FUNC:            MOV R6, #2

目录

1、不带返回的跳转指令 B

2、带返回的跳转指令 BL


1、不带返回的跳转指令 B

所谓不带返回,指的是,跳转之前不会保存跳转位置的下一条指令地址,跳转过去就回不来了。

指令格式:B  <标号/具体地址>

MAIN:MOV R1, #1MOV R2, #2B FUNC            @ 通过标号跳转MOV R3, #3FUNC:MOV R4, #4MOV R5, #5

从LR寄存器的值来看,说明指令 B 在跳转之前不会保存下一条指令的地址。

2、带返回的跳转指令 BL

BL指令就恰恰相反,在跳转之前,BL指令会自动将下一条指令的地址保存到LR寄存器。

指令格式:BL  <标号/具体地址>

MAIN:MOV R1, #1MOV R2, #2BL FUNC            @ 通过标号跳转MOV R3, #3FUNC:MOV R4, #4MOV R5, #5MOV PC, LR        @ 把LR寄存器的值赋给PC寄存器

注意:跳转过去以后,不会自动跳回来,需要手动将LR寄存器的值赋给PC寄存器才能跳转回来。

从调试结果来看,BL在跳转之前确实保存了下一条指令的地址。

对应C语言,就类似于

void func(){int d = 4;int e = 5;
}int main(){int a = 1;int b = 2;func();int c = 3;
}

跳转指令 —— B、BL相关推荐

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

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

  2. ARM汇编指令(B/BL/BX)

    跳转指令用于实现程序流程的跳转,在 ARM 程序中有两种方法可以实现程序流程的跳转: (1) 使用专门的跳转指令. (2) 直接向程序计数器 PC 写入跳转地址值. 通过向程序计数器 PC 写入跳转地 ...

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

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

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

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

  5. ARM中跳转指令BL/BLX偏移值计算规则

    源文地址:http://www.cnblogs.com/Reyzal/p/4857948.html 1. 4字节对齐arm指令 规则:偏移=( 跳转地址-(指令地址+8) )/4 原因: 指令地址 + ...

  6. arm 跳转指令跳转范围

    B 和 BL 指令都是 相对跳转(短跳转) 指令,通过偏移量跳转, 最大跳转距离是 ±32M 使用 mov pc, <>可以实现 对跳转(长跳转)(不会保存当前 PC 值) 关于B指令和B ...

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

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

  8. ARMv8体系结构基础05:比较和跳转指令

    目录 1 比较与测试指令详解 1.1 CMP指令 1.1.1 概述 1.1.2 指令编码分析 1.2 CMN指令 1.2.1 概述 1.2.2 指令编码分析 1.3 TST指令 1.3.1 概述 1. ...

  9. ARM 指令集跳转指令

    一.跳转指令 跳转指令用于实现程序流程的跳转,在ARM 程序中有两种方法可以实现程序流程的跳转: Ⅰ.使用专门的跳转指令. Ⅱ.直接向程序计数器PC 写入跳转地址值. 通过向程序计数器PC 写入跳转地 ...

最新文章

  1. 《COM组件开发实践》系列文章
  2. 多目标机器学习_NIPS2018 - 用多目标优化解决多任务学习
  3. asp:UpdatePanel中使用下拉时不得不注意的问题
  4. 利用福禄克网线/光纤测试仪规范测试BICSI标准
  5. 关于spring中util:/的配置
  6. anaconda 安装pytorch_conda上安装PyTorch
  7. arduino w5500 mysql,W5500网络模块会出现奇怪的问题
  8. android studio 优化完以后开不了虚拟机,Android studio 打不开官方虚拟机 100%成功解决方法...
  9. OpenMP、MPICH与OpenMPI
  10. mysql调换数据_mysql互换表中两列数据方法
  11. hdu2534-Score
  12. javaweb前台对参数加密,后台解密,避免出现中文乱码
  13. c/c++中一个 类似 a[2] 的数组引发的一些思考
  14. 高通联机修改IMEI等参数的相关解析
  15. 面试题大全2-技能提升-项目部分-运维
  16. 逆向CS生成的exe马
  17. 使用友盟+实现第三方登录(QQ、微信、微博)
  18. 【父亲节H5】用独特的方式表达最深沉的爱!
  19. win2003 开启显示加速
  20. 微信小程序之身份证照片正反上传

热门文章

  1. labview自动保存报表_Labview的office报表自动生成
  2. NIMA: Neural Image Assessment
  3. 网络运维和网络安全运维有什么区别?就业前景如何?
  4. (WebAssembly)JS/微信小程序,调用C/C++
  5. 牛客网练习赛15__吉姆的奇思妙想
  6. Python 程序构成
  7. 16进制字符串转int问题
  8. 遭遇Worm.UsbSpy.a/Worm.Win32.Delf.aj
  9. 经典的python入门书籍,每位初学者必备书籍
  10. 中台与组织 | 白话中台战略