函數調用時參數傳遞規則

ARM函數調用時參數傳遞規則

以前在學習如何在C語言中嵌入彙編時有了解到C語言以前的參數調用是使用寄存器html

R0傳遞第一個參數,架構

R1傳遞到第二個..ide

一直到R3傳遞第四個參數.函數

可是 實際上有時可能傳遞的參數很是多,超過8個,或是參數中有浮點數之類,參數也會超過4個寄存器,對於超出的部份並不使用R4,而是使用堆棧的方式.工具

對於ARM體系來講,不一樣語言撰寫的函數之間相互調用(mix calls)遵循的是 ATPCS(ARM-Thumb Procedure Call Standard),ATPCS主要是定義了函數呼叫時參數的傳遞規則以及如何從函數返回,關於ATPCS的詳細內容能夠查看ADS1.2 Online Books ——Developer Guide的2.1節。這篇文檔要講的是 彙編代碼中對C函數調用時如何進行參數的傳遞以及如何從C函數正確返回學習

不一樣於x86的參數傳遞規則,ATPCS建議函數的形參不超過4個,若是形參個數少於或等於4,則形參由R0,R1,R2,R3四個寄存器進行傳遞;若形參個數大於4,大於4的部分必須經過堆棧進行傳遞。ui

 

x86_64函數調用時參數傳遞規則spa

x86_64體系架構中函數調用時整數和指針參數按照從左到右的順序依次保存在寄存器rdi,rsi,rdx,rcx,r8和r9中,浮點型參數保存在寄存器xmm0,xmm1......中。如有更多的參數則按照從右到左的順序依次壓入堆棧。.net

當使用GDB工具調試C代碼時,若使用break function設置斷點時,若使用break function_name則斷點設置在進入function以及保存完寄存器後的彙編語句上,而使用break *function_name則斷點設置在剛剛進入函數的位置上(並無保存棧幀到堆棧)。指針

 

x86下的C函數調用慣例

網址:http://blog.csdn.net/phunxm/article/details/8985321

相關文章
相關標籤/搜索