之前在學習如何在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的部分必須通過堆棧進行傳遞。