ARM下傳遞函數使用的方法

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

C語言中嵌入ARM彙編時候,我們知道函數調用要使用R0、R1、R2、R3分別對應第一、第...個參數

通過這種方法進行傳遞參數。

但是我們要知道,我哦們的函數調用不排除存在超過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的部分必須通過堆棧進行傳遞。

 

所以說,ARM下函數調用參數傳遞是使用寄存器+棧來傳遞的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章