嵌入式STMFD SP!, R0 R7,LR 分析

2021-07-09 06:36:59 字數 651 閱讀 9970

stmfd sp!, 的偽**如下

sp = sp - 9×4;

address = sp; 

for i = 0 to 7

memory[address] = ri;

address  = address + 4;

memory[address] = lr;

注意: arm規定,

sp始終是指向棧頂位置的

,stm指令把暫存器列表中索引最小的暫存器存在最低位址,所以r0在最低位址,向上依次是r1,r2,...r7,lr。完成後sp指向儲存r0的位址。

詳解:對於大多數的設計來說都是把棧底設定在高位址,棧頂設定在低位址,即是說上面所說的首先要sp=sp-9×4,這裡理解了之後就好理解了,那麼執行這條指令後,棧中的資料順序從棧底到棧頂為lr ,r7,r6,r5,r4,r3,r2,r1,r0,此時sp-->r0,即棧頂,這和堆疊的定義沒有衝突,如果sp指向的是lr的話棧就沒有用了哦,其實這裡stmfd有兩種方法處理的,第一種先計算總共壓入的資料個數,直接一次更改指標sp=sp-4*(number)並從低位址向高位址存入資料,第二種就是每壓入一次就把sp=sp-1*4,同時乙個乙個的把資料從高位址向低位址壓入。

0 嵌入式 ARM簡介

arm 是乙個cpu核心 arm是 advanced risc machine 的縮寫 arm處理器本身是32位設計,但也配備16位指令集 晶元選擇 嵌入式開發者應該熟知各類晶元特性,比較選擇合適的處理器功能夠用,且留有一定的公升級餘地,還要考慮開發的難度以及價效比問題。配置硬體平台 選擇了晶元,需...

嵌入式課後總結(7)

1.程序是動態的,程式是靜態的 程式是有序 的集合 程序是程式的執行。通常程序不可再計算器之間遷移 而程式通常對應著檔案 靜態和可以複製。2.程序是暫時的,程式是長久的 程序是乙個狀態變化的過程,程式可以長久儲存。3.程序和程式組成不同 程序的組成包括程式 資料和程序控制塊 即程序狀態資訊 4.程序...

嵌入式學習 day7

今天主要學習了選單的程式設計 指標的各種知識還有linux的函式封裝 靜態庫還有動態庫的構建。1.選單的編寫 include include char menu void 這裡為什麼要用void,對與表頭的各種規則老是不熟悉,其次這裡定義乙個menu的函式 int main int argc,cha...