1. 程式人生 > >arm64彙編篇-06巢狀函式的彙編原理

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.函式執行結果:


以上程式執行步驟圖片已經詳細說明。

4.原理:

因為函式的返回值預設在x0中而引數是在x0-x7中所以程式剛執行的時候引數a是儲存在x0之中的如果不進行記憶體儲存,那麼在c的第一個求和運算中x0將會由原來的引數a變成a+b的和,這樣會導致d的引數a由於x0的改變就獲取不到了。

所以解決這個問題的方法是將引數事先在開闢的棧空間儲存起來,每次用到的時候就到指定地址取出來用,而計算結果返回再x0中以後同樣在棧空間儲存在記憶體中,需要用的時候到指定記憶體讀取。

5.記憶體執行圖:


以上就是巢狀函式的資料處理流程。