之前在學習如何在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的部分必須通過堆疊進行傳遞。
ARM引數傳遞規則
原文出處 作者celerychen2009 1.r0,r1,r2,r3,在呼叫函式時,用來存放前 4個函式引數和返回值,r4 r11,r14,在呼叫函式時必須儲存這些暫存器到堆疊當中。如果函式的引數多於 4個,則多餘引數存放在堆疊當中,即 sp,sp 4,sp 8,依次類推。2.函式內部通用的入棧出...
C C 函式呼叫時的引數傳遞小結
眾所周知 void method object arg 和void method object arg 的區別,前者 在函式呼叫的時候,將實參進行了乙個複製,複製了乙個映象給了method函式,不管在method中如何改變arg的值,之前的實參一直都沒有變化,自始自終都固定不變。而後者 則是將實參本...
ARM呼叫標準(ATPC)與函式引數傳遞
atpc automatic transfer power control 自動發信功率控制。技術的要點是微波發信機的輸出功率在atpc控制範圍內自動跟蹤接收段接收電平的變化而變化 1 暫存器的使用必須滿足下面的規則 子程式間通過暫存器r0 r3來傳遞引數,這時,暫存器r0 r3可以記作a1 a4。...