hyengine 寄存器问题之传递参数和接收返回值如何解决

简介: hyengine 寄存器问题之传递参数和接收返回值如何解决

问题一:优化前和优化后的方法调用汇编代码有哪些主要区别?


优化前和优化后的方法调用汇编代码有哪些主要区别?


参考回答:

优化前的方法调用汇编代码(如示例所示)在调用前后涉及了两次内存访问(str和ldr指令),分别用于将寄存器的值拷回栈和从栈中恢复寄存器的值。而优化后的代码则直接通过寄存器(x1作为第一个参数,x0作为返回值)进行参数传递和接收返回值,避免了这两次内存访问。


关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/666146



问题二:在优化后的汇编代码中,如何直接通过寄存器传递参数和接收返回值?


在优化后的汇编代码中,如何直接通过寄存器传递参数和接收返回值?


参考回答:

在优化后的汇编代码中,通过mov x1, x22指令将第一个参数x22直接放入寄存器x1中,以符合arm64的调用约定。方法调用后,通过mov x22, x0指令将返回值(存储在x0中)直接放入x22寄存器中,以便后续使用。这样,整个过程无需通过栈进行中间存储,减少了内存访问。


关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/666147



问题三:为什么优化后的代码中的寄存器编号比优化前多1?


为什么优化后的代码中的寄存器编号比优化前多1?


参考回答:

优化后的代码中的寄存器编号比优化前多1,是因为在优化过程中给栈偏移0也分配了寄存器(尽管这个信息在给出的代码片段中没有直接体现)。由于每个额外的寄存器分配都会占用一个新的寄存器编号,因此整体寄存器编号会增加。不过,这一变化对于理解寄存器参数传递的优化过程并不是关键,重要的是理解如何通过寄存器减少内存访问开销。


关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/666148



问题四:在优化前,方法头部取参数的代码是如何工作的?


在优化前,方法头部取参数的代码是如何工作的?


参考回答:

在优化前,方法头部取参数的代码通过ldr x9, [x19]指令从栈中(假设x19是指向栈顶的寄存器)加载第一个参数到寄存器x9中,然后通过mov x20, x9指令将x9中的值移动到另一个寄存器x20中,以供后续使用。


关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/666149



问题五:优化后的方法头部取参数代码与优化前相比有什么不同?


优化后的方法头部取参数代码与优化前相比有什么不同?


参考回答:

优化后的方法头部取参数代码与优化前的主要不同在于,它直接使用了调用者传递参数的寄存器x1(在arm64调用约定中,x1通常用于传递第一个参数)来存储参数值,而不是先从栈中加载。优化后的代码通过mov x20, x1指令直接将x1中的参数值移动到x20寄存器中。


关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/666150

相关文章
|
4月前
|
存储 编译器 C语言
【C/C++ 函数返回的奥秘】深入探究C/C++函数返回:编译器如何处理返回值
【C/C++ 函数返回的奥秘】深入探究C/C++函数返回:编译器如何处理返回值
468 3
|
12月前
|
Serverless 开发工具
ABAP 方法调用的参数传递里,通过引用传递的方式,能修改原始参数值吗?
ABAP 方法调用的参数传递里,通过引用传递的方式,能修改原始参数值吗?
ABAP 方法调用的参数传递里,通过引用传递的方式,能修改原始参数值吗?
|
24天前
|
存储 前端开发 rax
函数过程的调用
函数过程的调用
|
3月前
|
存储
函数调用与返回的相关指令
理解函数调用与返回的相关汇编指令及递归函数
|
4月前
|
存储 C语言
C语言中向函数传递值和从函数返回值的技术解析
C语言中向函数传递值和从函数返回值的技术解析
46 0
|
10月前
在调用一个函数时传递了一个参数,但该函数定义中并未接受任何参数
在调用一个函数时传递了一个参数,但该函数定义中并未接受任何参数
100 2
|
4月前
|
C语言
C语言函数传递了指针,值没有被修改的原因及解决方法
C语言函数中传递了指针作为参数,确切来说是传递了指向变量的内存地址作为参数,可经过函数内的修改之后,该指针指向的变量的值为什么不会被修改?就像下方这个函数:
91 1
|
存储 C语言 C++
Win32程序入口识别,定位回调函数,具体事件处理的定位,ESP寻址方式,压栈方式复习
Win32程序入口识别,定位回调函数,具体事件处理的定位,ESP寻址方式,压栈方式复习
|
存储 编译器 C语言
CPU指令解析及函数调用机制
CPU指令解析及函数调用机制
252 0