STMFD和LDMFD指令個人理解分析

2021-06-26 12:39:25 字數 1081 閱讀 3262

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指令個人理解分析

stmfd和ldmfd指令個人理解分析 ldm stm指令主要用於現場保護,資料複製,引數傳送等。stmfd指令 stmfd rn,stmfd sp!對於這條指令偽 的解釋,網上是這麼說的 sp sp 9 4 address sp for i 0 to 7 memory address ri add...

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