導航:首頁 > 軟體知識 > 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子程序怎麼返回相關的資料

熱點內容
內存是如何存數據的 瀏覽:55
信道狀態指示包括以下哪些信息 瀏覽:305
什麼是現代市場體系 瀏覽:891
加盟代理商如何注冊 瀏覽:249
g工程和數字媒體技術哪個前景好 瀏覽:372
信息化系統如何運維 瀏覽:415
濟南特色早餐技術培訓哪裡好 瀏覽:292
什麼是貨幣交易所的充值與提幣 瀏覽:951
信息提取題考查什麼 瀏覽:388
老外技術到底怎麼樣 瀏覽:745
微商老代理回歸朋友圈怎麼發 瀏覽:342
奶牛貓在市場上是什麼價格 瀏覽:938
心電圖中的數據表示什麼 瀏覽:76
程序員那麼可愛在哪裡可以看全部 瀏覽:5
信息組織都有哪些 瀏覽:375
醫保報銷數據怎麼寫 瀏覽:370
東盟海交易所怎麼賺錢 瀏覽:239
新鮮市場的股票有哪些 瀏覽:87
儋州哪個市場買鯉魚 瀏覽:182
四川信息流平台哪些內容點擊高 瀏覽:473