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


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

R0傳遞第一個參數,

R1傳遞到第二個..

一直到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的部分必須通過堆棧進行傳遞。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM