arm呼叫子程式與51呼叫子程式有什麼區別

2025-03-28 21:50:18 字數 1498 閱讀 9683

1樓:夫培勝許碧

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就複雜,靈活一些,傻瓜機和單反的區別。希望能幫到你。

2樓:詩若谷督辛

在微控制器裡區別是不大。不過在其它處理器上就大了。比如arm,中斷會直接改變執行模式盯斗大,使用不同的凱豎暫存器集。微控制器區別不大的原因是他只有乙個工作模式。

不過,中斷最主要的特點是有中斷線觸發的,而子程式是程式觸銷察發的。你不可能知道什麼地方轉到中斷處理。在程式設計思錄上完全是兩回事,儘管**上差不多。

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

3樓:物聯網研發

用c語言寫的arm程式呼叫c函式和普通的c語言格式一樣,沒有特殊的地方;

如果用c語言呼叫arm的彙編,則有規則。

在c程式和arm彙編程式之間相互呼叫時必須遵守atpcs(arm-thumb procedure 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關鍵字宣告要呼叫的彙編子程式為外部函式。

按鍵精靈子程式,按鍵精靈 呼叫子程式

大漠註冊略 dodm ret dm.findpic 560,95,1161,574,倩女幽魂.bmp 星辰變.bmp 仙途.bmp 000000 0.9,0,intx,inty delay 20 messagebox 找到,倩女幽魂 exit do elseif dm ret 1 thenmessa...

組合語言中子程式呼叫需要哪些暫存器進棧

段內呼叫至少有ip,段間呼叫還有cs 1 乙個包宣告抄 package statement,可選 襲 bai2 任意數量引入du語句zhi import statements 3 類的 dao宣告 class declarations 和介面宣告 inte ce declarations 該三要素必...

用Matlab編寫子程式,實現矩陣迴圈平移函式

採用復circshift 函式,非常方便。b circshift a,shiftsize 其中制shiftsize為移動bai大小,正數為向du右或者向下移動 負數zhi為向左或者向上移動。a 1 2 3 4 5 6 7 8 9 a 1 2 3 4 5 6 7 8 9 將矩dao陣a按行向下移動1。...