arm64彙編篇-06巢狀函式的彙編原理
阿新 • • 發佈:2019-02-13
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.記憶體執行圖:
以上就是巢狀函式的資料處理流程。