ARMV8 - A64 - 跳转和返回指令
说明
- C语言等高级语言,根据是否需要返回到触发跳转代码的下一条代码,跳转有两种语句:
- 不需要返回,例如:if,goto,switch,while等语句。
- 需要返回,例如:函数调用,系统调用,SMC调用等。
- A64汇编指令跳转也一样。
只跳转,不需要返回
- B指令
- 跳转到某地址执行,无法返回。
- 一般是函数内跳转,类似于C语言中while循环,if else等语句导致的跳转。
- 示例:
int test(int a, int b)
{if (a) {return 0;}return a+b;
}* 对应汇编代码
test:sub sp, sp, #16str w0, [sp, 12] //将实参a保存到栈对应地址str w1, [sp, 8] //将实参b保存到栈对应地址ldr w0, [sp, 12] //从栈中将变量a load到寄存器w0中cmp w0, 0 //对应上面的if 判断 w0(变量a)是否为0beq .L4 // 为0,跳转到标签 .L4mov w0, 0 // 不为0,将w0赋值为0b .L5 //不为0,跳转到 .L5,对应return 0
.L4: //对应 a+b;ldr w1, [sp, 12]ldr w0, [sp, 8]add w0, w1, w0
.L5: // 对应 returnadd sp, sp, 16ret
- BR指令
- 跳转到某寄存器保存的地址处运行,无法返回。
br x20 //跳转到通用寄存器x20指向地址运行
跳转后,需要返回
- 跳转和返回是不同的指令,返回时,需要主动调用返回指令。
- 指令详细动作如下:
- 跳转指令,先将下一条指令的地址(即返回后执行的起始地址)保存到通用寄存器 lr (x30)中,再跳转目标地址。
- 返回指令,跳转到x30寄存器所保存的地址执行。
跳转指令
- BL指令
- 跳转到某地址执行,运行完可以返回。
- 一般用于不同函数的跳转,类似于C语言中的函数调用,如:
- 语法
bl 0x100cfa754
- 示例
int test()
{return 0;
}int main()
{test();return 0;
}* 对应汇编
test:mov w0, 0ret // 返回到 bl test 下一条指令执行
main:stp x29, x30, [sp, -16]!add x29, sp, 0bl test //跳转到 test 函数地址执行mov w0, 0ldp x29, x30, [sp], 16ret
- BLR指令
- 跳转到某寄存器保存的地址处运行,运行完可以返回。
br x20 //跳转到通用寄存器x20指向地址运行
返回指令
- ret
- 主动调用后,跳转到x30寄存器所保存的地址执行。
- 语法
ret
相关文章:
ARMV8 - A64 - 跳转和返回指令
说明 C语言等高级语言,根据是否需要返回到触发跳转代码的下一条代码,跳转有两种语句: 不需要返回,例如:if,goto,switch,while等语句。需要返回,例如:函数调…...
QX320F28335,自研内核指令集,主频150MHz,自研工具链,纯国产DSP,硬件兼容TMS320F28335
32位单核CPU 主频150MHz flash 1M SRAM 500KB 单精度浮点运算FPU 3个4M精度12位的ADC 12个ePWM 6个HRPWM(150ps)...
《使用ThinkPHP6开发项目》 - 登录接口一
《使用ThinkPHP6开发项目》 - 安装ThinkPHP框架-CSDN博客 《使用ThinkPHP6开发项目》 - 设置项目环境变量-CSDN博客 《使用ThinkPHP6开发项目》 - 项目使用多应用开发-CSDN博客 《使用ThinkPHP6开发项目》 - 创建应用-CSDN博客 《使用ThinkPHP6开发项目》 - 创建控制器-CSD…...
zabbix精简模板
一、监控项目介绍 linux自带得监控项目比较多,也不计较杂,很多监控项目用不到。所以这里要做一个比较精简得监控模版 二、监控模板克隆 1.搜索原模板 2.克隆模板 全克隆模板,这样就和原来原模板没有联系了,操作也不会影响原模…...
GO设计模式——14、代理模式(结构型)
目录 代理模式(Proxy Pattern) 代理模式的核心角色: 优缺点 使用场景 注意事项 代码实现 代理模式(Proxy Pattern) 代理模式(Proxy Pattern)通过引入代理对象来控制对真实对象的访问。 代…...
外贸SOHO建站怎么做?海洋建站方法策略?
外贸SOHO建站多少钱?外贸自助建站系统有哪些? 随着全球化的加速发展,外贸SOHO已经成为越来越多创业者的选择。然而,要想在竞争激烈的外贸市场中脱颖而出,一个专业的外贸网站是必不可少的。接下来海洋建站将探讨外贸SO…...
商城免费搭建之java鸿鹄云商 java电子商务商城 Spring Cloud+Spring Boot+mybatis+MQ+VR全景+b2b2c
鸿鹄云商 SAAS云产品概述 1. 涉及平台 平台管理、商家端(PC端、手机端)、买家平台(H5/公众号、小程序、APP端(IOS/Android)、微服务平台(业务服务) 2. 核心架构 Spring Cloud、Spring Boot、My…...
【淘宝网消费类电子产品销售数据可视化】
淘宝网消费类电子产品销售数据可视化 引言数据爬取与处理数据可视化系统功能1. 总数据量分析2. 店铺总数据3. 店铺销售额排名4. 不同电子商品销售价格5. 单个商品价格排名6. 不同省份平均销量7. 不同地区的平均销售额8. 省份数量9. 每个省份有用的平均个数 创新点结语 引言 随…...
AI编译器及TVM概述
AI编译器 AI编译器有许多不同的类型和品牌,以下是一些常见的AI编译器: TensorFlow:谷歌开发的深度学习框架,它包含了一个用于优化和编译TensorFlow模型的编译器。 PyTorch:一个基于Python的开源深度学习框架…...
排序-归并排序与计数排序
文章目录 一、归并排序1、概念2、过程3、代码实现4、复杂度5、稳定性 二、 计数排序1、思路2、代码实现3、复杂度:4、稳定性 一、归并排序 1、概念 是建立在归并操作上的一种有效,稳定的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已…...
国产数据库适配-人大金仓(kingbase V8R3)
金仓数据库是基于POSTGRE_SQL 参考资料 国产数据库人大金仓踩坑记录和函数适配_金仓数据库关系不存在-CSDN博客 Springboot工程 适配人大金仓 kingbase V8R3 引入驱动包和方言包 hibernate-5.2.17.Finaldialect.jar kingbase8-8.2.0.jar application.yml文件 driver-cla…...
HAAS 哈斯机床 读写刀补数据
哈斯机床不管是串口机床还是网口机床 都提供了Q命令 可以使用Q命令 进行刀具补偿的读取和写入 最多支持200把刀的 读取和写入...
Visual studio+Qt开发环境搭建以及注意事项和打开qt的.pro项目
下载qt-然后安装5.14.2_msvc2017 不知道安装那个就全选5.14.2的父级按钮 https://download.qt.io/archive/qt/5.14/5.14.2/ 安装Visual studio,下载直接下一步就行 配置Visual studio的qt环境 在线安装-重启Visual studio会自动安装 离线安装-关闭Visual studio点击安装 关闭…...
BUUCTF crypto做题记录(4)新手向
目录 一、大帝的密码武器 二、Windows系统密码 三、信息化时代的步伐 四、凯撒?替换?呵呵! 一、大帝的密码武器 下载的文件叫zip,应该是提示文件的后缀名是zip,把名字改成1.zip或者其他也行,主要保证后缀名是zip就…...
【ArcGIS微课1000例】0080:ArcGIS将shp转json(geojson)案例教程
本文以案例的形式,讲述在ArcGIS软件中,将矢量数据转为GeoJSON的方法。 扩展阅读:【GIS风暴】GeoJSON数据格式案例全解 文章目录 一、GeoJson简介二、ArcGIS将矢量数据转为GeoJSON一、GeoJson简介 GeoJSON是一种基于JSON的地理空间数据交换格式,它定义了几种类型JSON对象以…...
阿里云Centos8安装Dockers详细过程
一、卸载旧版本 较旧的 Docker 版本称为 docker 或 docker-engine 。如果已安装这些程序,请卸载它们以及相关的依赖项。 yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \do…...
leetcode 二数之和 三数之和 四数之和
leetcode 二数之和 三数之和 四数之和 又到了不想写博客的环节,不想归不想,有些事情还是要做的,今天总结的是多数之和的问题。 二数之和 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target …...
制衣厂生产ERP系统怎么样?制衣厂生产ERP软件哪个好
有很多的制衣厂在订单处理、物料、仓储、销售、仓储、物料编码、车间成本核算、计件工资核算等方面还存在不少改进空间。 而经过多年的发展,现如今制衣行业的竞争比较激烈,如何提升各业务部门协同效率,减少车间物料损耗,简化生产…...
安装 DevEco Studio 后不能用本地 Node.js 打开
安装 DevEco Studio 后第一次打开时,不能用本地 Node.js 打开 答:因为本地 Node.js 文件夹名字中有空格 Node.js路径只能包含字母、数字、“。”、“_”、“-”、“:”和“V” 解决方法: 1.修改文件夹名称 2.重新下载 注意:找一…...
AppLink+WMS,实现仓储管理一体化
WMS像全能的库管员,可以在线还原真实仓库,让企业进行科学化、条理化、俯视化的仓库管理。 随着移动互联网和物流行业的快速发展,如何提高仓储管理的效率和准确性成为了企业关注的焦点。在这个背景下,结合AppLink和WMS系统&#x…...
基于算法竞赛的c++编程(28)结构体的进阶应用
结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...
国防科技大学计算机基础课程笔记02信息编码
1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...
【杂谈】-递归进化:人工智能的自我改进与监管挑战
递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...
【JavaEE】-- HTTP
1. HTTP是什么? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议,HTTP是基于TCP协议的一种应用层协议。 应用层协议:是计算机网络协议栈中最高层的协议,它定义了运行在不同主机上…...
Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...
iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版分享
平时用 iPhone 的时候,难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵,或者买了二手 iPhone 却被原来的 iCloud 账号锁住,这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...
YSYX学习记录(八)
C语言,练习0: 先创建一个文件夹,我用的是物理机: 安装build-essential 练习1: 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件,随机修改或删除一部分,之后…...
Objective-C常用命名规范总结
【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...
视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...
Caliper 配置文件解析:config.yaml
Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...
