1. 程式人生 > >點亮一個LED之參數傳遞規則

點亮一個LED之參數傳遞規則

href 順序 可變 程序 參數 title 規則 esc des

1 說明

實驗平臺: JZ2440

CPU: S3C2440


2 ARM-THUMB Procedure Call Standard(ATPCS: ARM-Thumb過程調用標準)

技術分享圖片

圖1 ATPCS中各寄存器的使用規則和名稱


2.1 數據棧結構

我們使用的棧結構為FD(Full Descending)類型。註意:棧基址所指向的內存單元,不存放數據。

技術分享圖片

圖2 棧結構


2.2 參數傳遞規則

根據參數個數是否固定,可以將子程序分為參數個數固定的子程序和參數個數可變的的子程序。

2.2.1 參數個數可變的子程序傳遞規則

參數傳遞時,可以將所有參數看作是存放在連續的存儲字單元中的字數據。

當參數個數不超過4個時,使用寄存器R0-R3來傳遞參數,依次將各個字數據分別傳送到寄存器R0-R3中去。

當參數個數超過4個時,還需使用數據棧來傳遞參數,把前4個字數據分別傳送到寄存器R0-R3中去,剩余的字數據傳送到數據棧中,需要註意的是,入棧順序與參數順序相反,即最後一個字數據先入棧。


2.2.2 參數個數固定的子程序傳遞規則

第一個整數參數通過寄存器R0-R3來傳遞,其他參數通過數據棧傳遞。


2.2.3 子程序結果返回規則

結果為一個32位的整數時,可以通過寄存器R0來返回。

結果為一個64位的整數時,可以通過寄存器R0和R1來返回,以此類推。

對於位數更多的結果,需要通過內存來反回。


3 反匯編代碼分析

技術分享圖片


附錄1:源碼

Start.S

技術分享圖片


main.c

技術分享圖片


附錄2:參考文獻

《嵌入式Linux應用開發》

《ARM體系結構與編程》

《S3C2440A_UserManual_Rev13》

點亮一個LED之參數傳遞規則