arm64汇编篇-06嵌套函数的汇编原理

x0x1概念:

一个函数的参数系统是将其从x0到x7去赋值的,但是计算后的结果却是返回到x0寄存器中,这样便涉及到寄存器数据的保护。

原理:

  对公用的参数和返回值先做栈保护存储起来,然后等要用的时候到对应的内存地址中取出来使用。

实例:

1.创建demo工程。

2.在mian文件中写入如下代码:

/** 系统方法 自动创建汇编代码 */

int sum(int a,int b){ 

  return a + b;

}

/** 嵌套函数方法 */

int func(int a,int b){ 

    int c = sum(a, b);   

    int d = sum(a, b);    

    return d;

}

在main函数中去掉循环调用下面函数;

func(1, 2);


3.函数运行结果:


arm64汇编篇-06嵌套函数的汇编原理

以上程序执行步骤图片已经详细说明。

4.原理:

因为函数的返回值默认在x0中而参数是在x0-x7中所以程序刚执行的时候参数a是存储在x0之中的如果不进行内存存储,那么在c的第一个求和运算中x0将会由原来的参数a变成a+b的和,这样会导致d的参数a由于x0的改变就获取不到了。

所以解决这个问题的方法是将参数事先在开辟的栈空间存储起来,每次用到的时候就到指定地址取出来用,而计算结果返回再x0中以后同样在栈空间保存在内存中,需要用的时候到指定内存读取。

5.内存执行图:

arm64汇编篇-06嵌套函数的汇编原理

以上就是嵌套函数的数据处理流程。