基本的ATPCS規則

2021-06-03 17:58:28 字數 2718 閱讀 5452

基本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個,餘下的引數就...