当前位置: 首页 > news >正文

ARMV8 - A64 - 跳转和返回指令

说明

  • C语言等高级语言,根据是否需要返回到触发跳转代码的下一条代码,跳转有两种语句:
  1. 不需要返回,例如:if,goto,switch,while等语句。
  2. 需要返回,例如:函数调用,系统调用,SMC调用等。
  • A64汇编指令跳转也一样。

只跳转,不需要返回

  1. 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
  1. BR指令
  • 跳转到某寄存器保存的地址处运行,无法返回。
br x20 //跳转到通用寄存器x20指向地址运行

跳转后,需要返回

  • 跳转和返回是不同的指令,返回时,需要主动调用返回指令。
  • 指令详细动作如下:
  • 跳转指令,先将下一条指令的地址(即返回后执行的起始地址)保存到通用寄存器 lr (x30)中,再跳转目标地址。
  • 返回指令,跳转到x30寄存器所保存的地址执行。

跳转指令

  1. 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
  1. BLR指令
  • 跳转到某寄存器保存的地址处运行,运行完可以返回。
br x20 //跳转到通用寄存器x20指向地址运行

返回指令

  1. ret
  • 主动调用后,跳转到x30寄存器所保存的地址执行。
  • 语法
ret
http://www.lryc.cn/news/259570.html

相关文章:

  • QX320F28335,自研内核指令集,主频150MHz,自研工具链,纯国产DSP,硬件兼容TMS320F28335
  • 《使用ThinkPHP6开发项目》 - 登录接口一
  • zabbix精简模板
  • GO设计模式——14、代理模式(结构型)
  • 外贸SOHO建站怎么做?海洋建站方法策略?
  • 商城免费搭建之java鸿鹄云商 java电子商务商城 Spring Cloud+Spring Boot+mybatis+MQ+VR全景+b2b2c
  • 【淘宝网消费类电子产品销售数据可视化】
  • AI编译器及TVM概述
  • 排序-归并排序与计数排序
  • 国产数据库适配-人大金仓(kingbase V8R3)
  • HAAS 哈斯机床 读写刀补数据
  • Visual studio+Qt开发环境搭建以及注意事项和打开qt的.pro项目
  • BUUCTF crypto做题记录(4)新手向
  • 【ArcGIS微课1000例】0080:ArcGIS将shp转json(geojson)案例教程
  • 阿里云Centos8安装Dockers详细过程
  • leetcode 二数之和 三数之和 四数之和
  • 制衣厂生产ERP系统怎么样?制衣厂生产ERP软件哪个好
  • 安装 DevEco Studio 后不能用本地 Node.js 打开
  • AppLink+WMS,实现仓储管理一体化
  • 如果是你,你选SOHO还是跟单?
  • 大语言模型--能力
  • 安装LLaMA-Factory微调chatglm3,修改自我认知
  • 以太网协议与DNS
  • Spring Boot的日志
  • Cisco Packet Tracer配置命令——交换机篇
  • python单例模式
  • 环境保护:人类生存的最后机会
  • 头歌-Python 基础
  • C++数据结构:B树
  • 【07】ES6:对象的扩展