stmfd和ldmfd指令個人理解分析
ldm/stm指令主要用於現場保護,資料複製,引數傳送等。
stmfd指令
stmfd rn,
stmfd sp!,
對於這條指令偽**的解釋,網上是這麼說的:
sp = sp - 9×4;
address = sp;
for i = 0 to 7
memory[address] = ri;
address = address + 4;
memory[address] = lr;
經過我在keil4的多次除錯,個人理解如下:
sp = address;
sp = sp - 4;
memory[address] = lr;
for( i=7;i>0;i--)
由於arm堆疊結構是從高向低壓棧的,此時sp即是棧頂。
這裡的sp = sp-4,是因為處理器是32位的arm,所以每次壓一次棧sp就會移動4個位元組(32位)。
假設此時sp位址為: 0x40000460,由前面解釋偽**可得下圖(
藍色標註的sp為執行指令前的sp位址,紅色標註的sp是執行指令後的sp位址,由此看出stmfd指令是向下壓棧的。
ldmfd 指令
ldmfd rn,
這條指令的意思是以rn為基址(起始位址),取值寫入暫存器列表。
ldmfd sp!,^
對於這條指令,網上的偽**解釋是:
address = sp;
for i = 0 to 7
ri = memory[address ,4]
address = address + 4;
sp = address;
個人理解與之相同。。
假設此時sp位址為: 0x4000043c,由前面解釋偽**可得下圖(藍色填充區為位址):
藍色標註的sp為執行指令前的sp位址,紅色標註的sp是執行指令後的sp位址。
STMFD和LDMFD指令個人理解分析
ldm stm指令主要用於現場保護,資料複製,引數傳送等。stmfd指令 stmfd rn,stmfd sp!對於這條指令偽 的解釋,網上是這麼說的 sp sp 9 4 address sp for i 0 to 7 memory address ri address address 4 memor...
CMD Mysql常見指令 個人筆記
1.基本操作 進入資料庫 show databases use databases 資料庫名 show tables 顯示所有tables use table 表名 desc table 表詳情 2.eclipse 埠被占用解決方案 進入cmd 輸入指令 netstat ano findstr 80...
AngularJS事件指令(個人筆記)
1 記得引入angular.min.js 2 按f12開啟控制台,選擇console,可以檢視事件起到作用且成功列印 click me click me click me click me jacky rose jacky rose 滑鼠按下 滑鼠按下彈起 滑鼠進入 滑鼠離開 滑鼠移動 滑鼠進入 s...