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。...