基本atpcs規定了在子程式呼叫時的一些基本規則,包括下面四方面的內容。
各暫存器的使用規則及其相應的名稱。
資料棧的使用規則。
引數傳遞的規則。
子程式結果的返回規則。
1. 暫存器的使用規則及其相應的名稱
暫存器的使用必須滿足下面的規則。
子程式間通過暫存器r0~r3來傳遞引數,被呼叫的子程式在返回前無需恢復暫存器r0~r3的內容。
在子程式中,使用暫存器r4~r11儲存區域性變數,這時暫存器可以記作v1~v8。如果在子程式中用到了暫存器v1~v8中的某些暫存器,子程式進入時必須儲存這些暫存器的值,在返回前必須恢復這些暫存器的值;對於子程式中沒有用到的暫存器則不必進行這些操作。在thumb程式中,通常只能使用暫存器r4~r7來儲存區域性變數。
暫存器r12用作子程式間的scratch暫存器(用於儲存sp, 在函式返回時使用該暫存器出棧),記作ip。
暫存器r13用作資料棧指標,記作sp。在子程式中暫存器r13不能用作其他用途。暫存器sp在進入子程式時的值和退出子程式的值必須相等。
暫存器r14稱為連線暫存器,記作lr。它用作儲存子程式的返回位址。如果在子程式中儲存了返回位址,暫存器r14則可以用作其他用途。
暫存器r15是程式計數器,記作pc。它不能用作其他用途。
atpcs中的各暫存器在arm編譯器和彙編器中都是預定義的。
表4-1總結了在atpcs中各暫存器的使用規則及其名稱。
表4-1 暫存器的使用規則
寄存 器
別 名特殊名稱
使 用 規 則
r15pc
程式計數器
r14lr
連線暫存器
r13sp
資料棧指標
r12ip
子程式內部呼叫的scratch暫存器
r11v8
arm狀態區域性變數暫存器8
r10v7
slarm狀態區域性變數暫存器7
在支援資料檢查的atpcs
中為資料棧限制指標
(續表)
寄 存器
別名特殊名稱
使 用 規 則
r9v6
sbarm狀態區域性變數暫存器6
在支援rwpi的atpcs
中為靜態基址暫存器
r8v5
arm狀態區域性變數暫存器5
r7v4
wrarm狀態區域性變數暫存器4
thumb狀態工作暫存器
r6v3
區域性變數暫存器3
r5v2
區域性變數暫存器2
r4v1
區域性變數暫存器1
r3a4
引數/結果/scratch暫存器4
r2a3
引數/結果/scratch暫存器3
r1a2
引數/結果/scratch暫存器2
r0a1
引數/結果/scratch暫存器1
2. 資料棧的使用規則
棧指標是儲存了棧頂位址的暫存器值。棧指標通常可以指向不同的位置。一般的,棧可以有以下四種資料棧。
fd:full descending
ed:empty descending
fa:full ascending
ea:empty ascending
當棧指標指向與棧頂元素時,稱為full棧。當棧指標指向與棧頂元素相鄰的乙個元素時,稱為empty棧。資料棧的增長方向也可以不同,當資料棧向記憶體減少的位址方向增長時,稱為descending棧;反之稱為ascending棧。arm的atpcs規定預設的資料棧為full descending(fd)型別,並且對資料棧的操作是8位元組對齊的。
3. 引數傳遞的規則
根據引數個數是否固定可以將子程式引數傳遞規則分為以下兩種。
(1) 引數個數可變的子程式引數傳遞規則
對於引數個數可變的子程式,但引數不超過四個時,可以使用暫存器r0~r3來傳遞引數;當引數超過四個時,還可以使用資料棧來傳遞引數。在傳遞引數時,將所有引數看作是存放在連續的記憶體單元中的字資料。然後,依次將各字資料傳送到暫存器r0、r1、r2、r3中,如果引數多於四個,則將剩餘的字資料傳送到資料棧中,入棧的順序與引數順序相反,即最後乙個字資料先入棧。
(2) 引數個數固定的子程式引數傳遞規則
對於引數個數固定的子程式,引數傳遞與引數個數可變的子程式引數傳遞的規則不同,如果系統包含浮點運算的硬體部件,浮點引數將按各個浮點引數按順序處理和為每個浮點引數分配fp暫存器的規則傳遞。分配的方法是,滿足該浮點引數需要的且編號最小的一組連續的fp暫存器中,第乙個整數引數,通過暫存器r0~r3來傳遞,其他引數通過資料棧傳遞。
4. 子程式結果返回規則
子程式中結果返回的規則如下。
如果結果為乙個32位的整數,可以通過暫存器返回。
如果結果為乙個64位整數,可以通過暫存器r0和r1返回,依此類推。
如果結果為乙個浮點數,可以通過浮點運算的暫存器f0、d0或s0返回。
如果結果為複合型的浮點數(如複數),可以通過暫存器f0~fn或者d0~dn返回。
對於為數更多的結果,需要通過記憶體來傳遞。
嵌入式C和彙編混合程式設計規則 ATPCS規則
基本atpcs 基本atpcs規定了在子程式呼叫時的一些基本規則,包括以下三個方面的內容 1 各暫存器的使用規則及其相應的名字 2 資料棧的使用規則 3 引數傳遞的規則.一 暫存器的使用規則 1.子程式通過暫存器r0 r3來傳遞引數.這時暫存器可以記作 a1 a4 被呼叫的子程式在返回前無需恢復暫存...
ATPCS中各暫存器的使用規則及名稱
s3c2440屬於arm9,一般在arm系列的soc中都會有atpcs這十五個暫存器。下面我們主要講解一下這十五個暫存器的名稱和用法。先看下名字 再看下這些暫存器的用法和功能 特殊暫存器 r0 r3 用作傳入函式引數,傳出函式返回值。在子程式呼叫之間,可以將r0 r3用於任何用途。被呼叫函式在返回之...
ARM基礎學習 ATPCS子程式呼叫基本規範
atpcs是 arm thumb procedure call standard的縮寫。意思是arm程式和thumb程式中子程式呼叫的基本規範。暫存器的使用規則 當引數個數小於等於4個的時候,子程式間通過r0 r3來傳遞引數,在返回前無需恢復暫存器r0 r3的內容 如果引數個數大於4個,餘下的引數就...