ARMV8 - A64 - 跳转和返回指令

2023-12-06 23:36
文章标签 指令 返回 跳转 armv8 a64

本文主要是介绍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
main:stp     x29, x30, [sp, -16]!add     x29, sp, 0bl      test1mov     w0, 0ldp     x29, x30, [sp], 16ret
  1. BLR指令
  • 跳转到某寄存器保存的地址处运行,运行完可以返回。
br x20 //跳转到通用寄存器x20指向地址运行

返回指令

  1. ret
  • 主动调用后,跳转到x30寄存器所保存的地址执行。
  • 语法
ret

这篇关于ARMV8 - A64 - 跳转和返回指令的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/463759

相关文章

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

工作常用指令与快捷键

Git提交代码 git fetch  git add .  git commit -m “desc”  git pull  git push Git查看当前分支 git symbolic-ref --short -q HEAD Git创建新的分支并切换 git checkout -b XXXXXXXXXXXXXX git push origin XXXXXXXXXXXXXX

Android中如何实现adb向应用发送特定指令并接收返回

1 ADB发送命令给应用 1.1 发送自定义广播给系统或应用 adb shell am broadcast 是 Android Debug Bridge (ADB) 中用于向 Android 系统发送广播的命令。通过这个命令,开发者可以发送自定义广播给系统或应用,触发应用中的广播接收器(BroadcastReceiver)。广播机制是 Android 的一种组件通信方式,应用可以监听广播来执行

struts2中的json返回指定的多个参数

要返回指定的多个参数,就必须在struts.xml中的配置如下: <action name="goodsType_*" class="goodsTypeAction" method="{1}"> <!-- 查询商品类别信息==分页 --> <result type="json" name="goodsType_findPgae"> <!--在这一行进行指定,其中lis是一个List集合,但

mysql中导入txt文件数据的操作指令

1 表tt的格式:    CREATE TABLE `tt` (   `ind` int NOT NULL auto_increment,   `name` char(100) default NULL,   PRIMARY KEY  (`ind`)  )   2 文件d.txt的内容示例:  1,a  2,b  3,c

可选择的反思指令微调

论文:https://arxiv.org/pdf/2402.10110代码:GitHub - tianyi-lab/Reflection_Tuning: [ACL'24] Selective Reflection-Tuning: Student-Selected Data Recycling for LLM Instruction-Tuning机构:马里兰大学, Adobe Research领

Clion不识别C代码或者无法跳转C语言项目怎么办?

如果是中文会显示: 此时只需要右击项目,或者你的源代码目录,将这个项目或者源码目录标记为项目源和头文件即可。 英文如下:

驱动安装注册表指令

HKCR: HKEY_CLASSES_ROOT HKCU: HKEY_CURRENT_USER HKLM: HKEY_LOCAL_MACHINE HKU: HEKY_USER HER: 相对根键

4G模块、WIFI模块、NBIOT模块通过AT指令连接华为云物联网服务器(MQTT协议)

MQTT协议概述 MQTT(Message Queuing Telemetry Transport)是一种轻量级的消息传输协议,它被设计用来提供一对多的消息分发和应用之间的通讯,尤其适用于远程位置的设备和高延迟或低带宽的网络。MQTT协议基于客户端-服务器架构,客户端可以订阅任意数量的主题,并可以发布消息到这些主题。服务器(通常称为MQTT Broker)则负责接受来自客户端的连接请求,并转发消

matlab一些基本重要的指令

重点内容 运行MATLAB的帮助demo,在Command Window 输入 “demo”,或在Launch Pad 选项卡“demos” 任何时候都可以: 清除Command Window内容:clc 清除Figure Window(图形窗口) clf 清除workspace 变量内容: clear 注意:M脚本文件和输入指令中的变量都在workspace中,为避免变量冲突,一般在