跳转指令 —— B、BL
跳转指令可以跳转到标号的下一条指令,本质就是修改了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相关推荐
- arm64汇编b带条件跳转指令和bl跳转带返回ret指令
文章目录 ret返回指令 B 跳转指令 BL 带返回的跳转指令 B指令可以接上后缀,用来和cmp比较后待条件的跳转 ret返回指令 cpu遇到ret之后,会把lr赋值给pc,这样cpu执行了pc里的地 ...
- ARM汇编指令(B/BL/BX)
跳转指令用于实现程序流程的跳转,在 ARM 程序中有两种方法可以实现程序流程的跳转: (1) 使用专门的跳转指令. (2) 直接向程序计数器 PC 写入跳转地址值. 通过向程序计数器 PC 写入跳转地 ...
- 汇编跳转指令B、BL、BX、BLX 和 BXJ的区别
已针对原链接错误翻译并更正 跳转指令用于实现程序流程的跳转,在 ARM 程序中有两种方法可以实现程 ...
- STM32--汇编语言:子程呼叫与无条件跳转指令B、BL、BX和BLX
1.B:无条件转移 B指令是最简单的跳转指令.一旦遇到一个B指令,ARM处理器将立即跳转到给定的目标地址,从那里继续执行.注意,存储在跳转指令中的实际值是相对当前PC值的一个偏移量,而不是绝对地址,它 ...
- ARM中跳转指令BL/BLX偏移值计算规则
源文地址:http://www.cnblogs.com/Reyzal/p/4857948.html 1. 4字节对齐arm指令 规则:偏移=( 跳转地址-(指令地址+8) )/4 原因: 指令地址 + ...
- arm 跳转指令跳转范围
B 和 BL 指令都是 相对跳转(短跳转) 指令,通过偏移量跳转, 最大跳转距离是 ±32M 使用 mov pc, <>可以实现 对跳转(长跳转)(不会保存当前 PC 值) 关于B指令和B ...
- arm32和arm64常用指令B BL BLX机器码计算
现在大部分手机cpu架构是ARM v7-A和ARMV8-A,,在ARM-v7A中常使用32位ARM指令集并且支持thumb指令集与arm的切换,而在ARMV8中使用的是64位ARM指令集且不再有thu ...
- 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. ...
- ARM 指令集跳转指令
一.跳转指令 跳转指令用于实现程序流程的跳转,在ARM 程序中有两种方法可以实现程序流程的跳转: Ⅰ.使用专门的跳转指令. Ⅱ.直接向程序计数器PC 写入跳转地址值. 通过向程序计数器PC 写入跳转地 ...
最新文章
- 《COM组件开发实践》系列文章
- 多目标机器学习_NIPS2018 - 用多目标优化解决多任务学习
- asp:UpdatePanel中使用下拉时不得不注意的问题
- 利用福禄克网线/光纤测试仪规范测试BICSI标准
- 关于spring中util:/的配置
- anaconda 安装pytorch_conda上安装PyTorch
- arduino w5500 mysql,W5500网络模块会出现奇怪的问题
- android studio 优化完以后开不了虚拟机,Android studio 打不开官方虚拟机 100%成功解决方法...
- OpenMP、MPICH与OpenMPI
- mysql调换数据_mysql互换表中两列数据方法
- hdu2534-Score
- javaweb前台对参数加密,后台解密,避免出现中文乱码
- c/c++中一个 类似 a[2] 的数组引发的一些思考
- 高通联机修改IMEI等参数的相关解析
- 面试题大全2-技能提升-项目部分-运维
- 逆向CS生成的exe马
- 使用友盟+实现第三方登录(QQ、微信、微博)
- 【父亲节H5】用独特的方式表达最深沉的爱!
- win2003 开启显示加速
- 微信小程序之身份证照片正反上传
热门文章
- labview自动保存报表_Labview的office报表自动生成
- NIMA: Neural Image Assessment
- 网络运维和网络安全运维有什么区别?就业前景如何?
- (WebAssembly)JS/微信小程序,调用C/C++
- 牛客网练习赛15__吉姆的奇思妙想
- Python 程序构成
- 16进制字符串转int问题
- 遭遇Worm.UsbSpy.a/Worm.Win32.Delf.aj
- 经典的python入门书籍,每位初学者必备书籍
- 中台与组织 | 白话中台战略