ATPCS ARM暫存器及值傳遞規則

2021-06-11 11:41:31 字數 972 閱讀 6753

對於arm體系來說,不同語言撰寫的函式之間相互呼叫(mix calls)遵循的是 atpcs(arm-thumb procedure call standard),atpcs主要是定義了函式呼叫時引數的傳遞規則以及如何從函式返回,關於atpcs的詳細內容可以檢視ads1.2 online books developer guide的2.1節。

簡單atpcs暫存器的使用規則:

1. 子程式通過暫存器r0~r3來傳遞引數. 這時暫存器可以記作: a0~a3 , 被呼叫的子程式在返回前無需恢復暫存器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.結果為乙個32位的整數時,可以通過暫存器r0返回.

2.結果為乙個64位整數時,可以通過r0和r1返回,依此類推.

3.結果為乙個浮點數時,可以通過浮點運算部件的暫存器f0,d0或者s0來返回.

4.結果為乙個復合的浮點數時,可以通過暫存器f0-fn或者d0~dn來返回.

5.對於位數更多的結果,需要通過呼叫記憶體來傳遞.

暫存器(通用暫存器)

因為學習使用的是王爽的 組合語言 第3版 因此也只能提到8086cpo的暫存器。對於其他而言,原理都是相通的。對於8086暫存器,有14個暫存器,主要是 ax bx cx dx si di sp bp ip cs ss ds es psw。一 通用暫存器 8086的通用暫存器有ax bx cx dx...

暫存器,標誌暫存器

涉及硬體傳輸資料的,往往包含以下內容 1.資料傳輸引腳 資料放 2.控制引腳 怎麼控制 3.狀態引腳 結果如何 暫存器相當於cpu內部的儲存單元,可能是連續排列,相當於 c語言中的陣列。一 8個通用暫存器 16 bit accumulate axah alr0 count cxch clr1 dat...

CS 暫存器 和 IP 暫存器

下面將要介紹的是一組非常非常重要的暫存器,即 cs ip cs ip 兩個暫存器指示了 cpu 當前將要讀取的指令的位址,其中cs 為 段暫存器,而ip 為指令指標暫存器。什麼叫做指示了 cpu 當前將要讀取的指令呢?在 8086 cpu 中,為什麼 cpu 會自動的執行指令呢?這些指令肯定是存放在...