導航:首頁 > 軟體知識 > arm子程序怎麼返回

arm子程序怎麼返回

發布時間:2022-12-14 11:39:18

㈠ arm 如何調用子程序,就是用c語言寫的,好像有許多格式控制,不是很明白,請指教

用C語言寫的ARM程序調用C函數和普通的C語言格式一樣,沒有特殊的地方;
如果用C語言調用ARM的匯編,則有規則。
在C程序和ARM匯編程序之間相互調用時必須遵守ATPCS(ARM-THUMB procere call standard )規則。ATPCS規定了一些子程序間調用的基本規則,比如:
寄存器的使用規則
子程序之間通過寄存器r0~r3來傳遞參數,當參數個數多於4個時,使用堆棧來傳遞參數。
在子程序中,使用寄存器r4~r11保存局部變數。
寄存器r12用於保存堆棧指針SP,當子程序返回時使用該寄存器出棧,記作IP。寄存器r13用作堆棧指針,記作SP。寄存器r14稱為鏈接寄存器,記作LR。該寄存器用於保存子程序的返回地址。寄存器r15稱為程序計數器,記作PC。  
堆棧的使用規則
堆棧採用滿遞減類型(FD,Full Descending),即堆棧通過減小存儲器地址而向下增長,堆棧指針指向內含有效數據項的最低地址。
參數的傳遞規則
整數參數的前4個使用r0~r3傳遞,其他參數使用堆棧傳遞;
子程序的返回結果為一個32位整數時,通過r0返回;返回結果為一個64位整數時,通過r0和r1返回;依此類推。
匯編程序調用C程序的方法為:首先在匯編程序中使用IMPORT偽指令事先聲明將要調用的C語言函數;然後通過BL指令來調用C函數。
C程序調用匯編子程序的方法為:首先在匯編程序中使用EXPORT偽指令聲明被調用的子程序,表示該子程序將在其他文件中被調用;然後在C程序中使用extern關鍵字聲明要調用的匯編子程序為外部函數。

㈡ arm調用子程序與51調用子程序有什麼區別

51:只有ACALL、LCALL兩條子程序調用指令,其中ACALL只能在2^11范圍內調用子程序,而LCALL可以調用任意位置的子程序。特點:使用指令時無任何後綴、修飾,硬體會自動保存斷點,在被調用的子程序最後用一條RET指令便輕松返回斷點;
ARM:只有BL(X)指令全范圍調用子程序,BL指令是用B(跳轉)指令擴展來的,表示在B到一個地址時,同時保存下條指令的地址到LR中,因此,在你的子程序中需要使用B/BX
LR指令來返回斷點,或者使用MOV
PC,LR來返回。指令的後綴X,表示在調用或返回時是否需要切換處理器狀態。
綜合來說,調用子程序是沒有本質區別的,不過51因為用途簡單,硬體幫你做了更多的事情,比如一個RET就返回了,而ARM就復雜,靈活一些,傻瓜機和單反的區別。希望能幫到你

閱讀全文

與arm子程序怎麼返回相關的資料

熱點內容
微信小程序號怎麼開通 瀏覽:594
最近青島中韓老公務市場怎麼樣 瀏覽:714
女朋友說撩妹技術可以呀怎麼回 瀏覽:232
智檢一號怎麼代理 瀏覽:718
保險公司不發代理人工資哪裡投訴 瀏覽:135
無技術做什麼謀生 瀏覽:176
如何在手機上理財產品 瀏覽:302
開直播賣產品需要具備哪些條件 瀏覽:991
市場部資源有什麼 瀏覽:408
安利哪些產品值得推薦 瀏覽:618
交易貓賣原神賬號送郵賬號填什麼 瀏覽:999
伊對怎麼發信息都不說話 瀏覽:452
小米電視如何安裝u盤里的程序 瀏覽:852
互聯網代理記賬加盟有哪些 瀏覽:141
mysql數據異常怎麼辦 瀏覽:330
哪個手機可以看攔截信息 瀏覽:181
轉正本人基本信息是哪裡人怎麼填 瀏覽:320
安檢儀測哪些數據 瀏覽:107
網頁代理怎麼用 瀏覽:724
獻血以後血站發信息的內容是什麼 瀏覽:168