ATPCS

ATPCS即ARM-THUMB procedure call standard(ARM-Thumb過程調用標準)的簡稱。

PCS規定了應用程式的函式可以如何分開地寫,分開地編譯,最後將它們連線在一起,所以它實際上定義了一套有關過程(函式)調用者與被調用者之間的協定。

基本介紹

  • 外文名:ARM-THUMB procedure call standard
  • 簡稱:ATPCS
  • 所屬:計算機
  • 作用:程式調用標準.
簡介,使用規則,

簡介

PCS強制實現如下約定:調用函式如何傳遞參數(即壓棧方法,以何種方式存放參數),被調用函式如何獲取參數,以何種方式傳遞函式返回值。
PCS的制訂是一系列指標的“tradeoff(折衷)”(因為很大程度上涉及系統的一些性能),如會涉及生成代碼的大小,調試功能的支持,函式調用上下文處理速度以及記憶體消耗。當然,通過編譯器的支持可以讓生成的代碼有不同的特性,如gcc編譯選項可以支持或不支持framepointer來支持深入調試功能或提高程式運行性能。
PCS是與體系結構密切相關的,直接涉及編譯器如何使用處理器提供的套用暫存器,如編譯器使用什麼暫存器作為棧指針,利用哪些暫存器作直接傳參等。值得注意的是,沒有誰規定說PCS是必須這樣而不是那樣的。它是套用相關的。任何一個作業系統和套用可以處於它自身的考慮定義自己的PCS。當然,如果那樣,也必須有自己的編譯器。而實際上,在一個處理器設計時,都會有某種假設,所以PCS某種程度上應該是一樣的。
ATPCS就是基於ARM指令集和THUMB指令集過程調用的規範。
ATPCS概述 為了使單獨編譯的C語言程式和彙編程式之間能夠相互調用,必須為子程式之間的調用規定一定的規則.ATPCS就是ARM程式和THUMB程式中子程式調用的基本規則...
一.ATPCS概述...
有調用關係的所有子程式必須遵守同一種ATPCS. 編譯器或者彙編器在ELF格式的目標檔案中設定相應的屬性,標識用戶選定的ATPCS類型.對應不同類型的ATPCS規則,有相應的C語言庫,連線器根據用戶指定的ATPCS類型連線相應的C語言庫...
二. 基本ATPCS...

使用規則

1. 子程式通過暫存器R0~R3來傳遞參數. 這時暫存器可以記作: A1~A4 , 被調用的子程式在返回前無需恢復暫存器R0~R3的內容.
2. 在子程式中,使用R4~R11來保存局部變數.這時暫存器R4~R11可以記作: V1~V8 .如果在子程式中使用到V1~V8的某些暫存器,子程式進入時必須保存這些暫存器的值,在返回前必須恢復這些暫存器的值,對於子程式中沒有用到的暫存器則不必執行這些操作.在THUMB程式中,通常只能使用暫存器R4~R7來保存局部變數.
3.暫存器R12用作子程式間scratch暫存器,記作ip; 在子程式的連線代碼段中經常會有這種使用規則.
4. 暫存器R13用作數據棧指針,記做SP,在子程式中暫存器R13不能用做其他用途. 暫存器SP在進入子程式時的值和退出子程式時的值必須相等.
5. 暫存器R14用作連線暫存器,記作lr ; 它用於保存子程式的返回地址,如果在子程式中保存了返回地址,則R14可用作其它的用途.
6. 暫存器R15是程式計數器,記作PC ; 它不能用作其他用途.
7. ATPCS中的各暫存器在ARM編譯器和彙編器中都是預定義的.
參數的傳遞規則.
根據參數個數是否固定,可以將子程式分為參數個數固定的子程式和參數個數可變的子程式.這兩種子程式的參數傳遞規則是不同的.
1.參數個數可變的子程式參數傳遞規則
對於參數個數可變的子程式,當參數不超過4個時,可以使用暫存器R0~R3來進行參數傳遞,當參數超過4個時,還可以使用數據棧來傳遞參數. 在參數傳遞時,將所有參數看做是存放在連續的記憶體單元中的字數據。然後,依次將各名字數據傳送到暫存器R0,R1,R2,R3; 如果參數多於4個,將剩餘的字數據傳送到數據棧中,入棧的順序與參數順序相反,即最後一個字數據先入棧. 按照上面的規則,一個浮點數參數可以通過暫存器傳遞,也可以通過數據棧傳遞,也可能一半通過暫存器傳遞,另一半通過數據棧傳遞.
2.參數個數固定的子程式參數傳遞規則
對於參數個數固定的子程式,參數傳遞與參數個數可變的子程式參數傳遞規則不同,如果系統包含浮點運算的硬體部件,浮點參數將按照下面的規則傳遞: 各個浮點參數按順序處理;為每個浮點參數分配FP暫存器;分配的方法是,滿足該浮點參數需要的且編號最小的一組連續的FP暫存器.第一個整數參數通過暫存器R0~R3來傳遞,其他參數通過數據棧傳遞.
子程式結果返回規則
1.結果為一個32位的整數時,可以通過暫存器R0返回.
2.結果為一個64位整數時,可以通過R0和R1返回,依此類推.
3.結果為一個浮點數時,可以通過浮點運算部件的暫存器f0,d0或者s0來返回. 4.結果為一個複合的浮點數時,可以通過暫存器f0-fN或者d0~dN來返回. 5.對於位數更多的結果,需要通過調用記憶體來傳遞.

相關詞條

熱門詞條

聯絡我們