新聞中心

EEPW首頁 > 嵌入式系統 > 設計應用 > ARM的入棧出棧具體的操作詳解

ARM的入棧出棧具體的操作詳解

作者: 時間:2016-11-11 來源:網絡 收藏
ARM用ADS編譯的話,用的是FD 滿減 棧方式。順便說下滿減 FD方式,入棧是先移動SP,再存數據;出棧是先存數據,再移SP。

我看的資料具體也就說到這里了。

本文引用地址:http://2s4d.com/article/201611/316907.htm

看下面的例子:

STMFD SP!, {R0-R3, R12, LR}

。。。。。。


LDMFD SP!, {R0-R3, R12, PC}^

STMFD之后,SP就指向LR了,LDMFD 就把LR 出棧給了R0了,若這么理解的話肯定不對了。肯定進棧和出棧的順序是不一樣的,雖然表達方式上可能為了直觀都是從 低到高的寄存器。

以前困惑的就是STMFD 命令 對于操作數 是按照什么順序壓棧的

比如:STMFD sp!{R0-R5,LR} 進棧順序是:

高地址(1方式)

LR

R5

R4

```````

R0 <-sp

低地址

還是:

高地址(2方式)

R0

R1

```

R5

LR <-sp

低地址

現在通過下表,可以輕松的解決這個問題:

尋址方式
說明
pop
=LDM
push
=STM
FA
遞增滿
LDMFA
LDMDA
STMFA
STMIB
FD
遞減滿
LDMFD
LDMIA
STMFD
STMDB
EA
遞增空
LDMEA
LDMDB
STMEA
STMIA
ED
遞減空
LDMED
LDMIB
STMED
STMDA

按照圖表,可知 STMFD對應的是STMDB,根據arm指令手冊,可知STMDB入棧順序是(1方式)

而LDMFD對應的是LDMIA,這樣這兩個操作就可以成功配對



關鍵詞: ARM入棧出

評論


技術專區(qū)

關閉