STMFD和LDMFD指令個人理解分析

2021-06-25 22:45:30 字數 1104 閱讀 6171

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