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:原始碼
《嵌入式linux應用開發》
《arm體系結構與程式設計》
《s3c2440a_usermanual_rev13》
點亮乙個LED燈
設計定義 二選一多路器 兩個輸入io,a b。可以是高電平,輸入按鍵按下時,led燈與a埠狀態保持一致,按鍵釋放時,led燈與b埠狀態保持一致 設計輸入 建立乙個project 編寫功能 input a 輸入埠a,b input b input key in 按鍵輸入,實現輸入通道的選擇 outpu...
第乙個程式點亮乙個LED燈
include 引用52包檔案 可以理解為命名空間 sbit p1 0 p1 0 定義p1管腳0 void main 主程式 c語言所必需要有的 以下非程式 上面的程式,首先引用reg52.h,這裡有對操作微控制器相關資料的封裝,方便使用者使用 接著,用p1 0這個sbit型別的變數,引用p1口的第...
一步步點亮LED之彙編點亮LED
gpj0con埠一共有8個埠,分別記住 gpj0 0 gpj0 7 相關暫存器為gpj0con gpj0dat gpj0con暫存器中設定8個引腳的工作模式 32 8 4,每個引腳分到4位,譬如gpj0 0位bit0 bit3,我們就給 它寫入0001得到輸出模式 1 需要控制的引腳 gpj0 3 ...