微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > arm堆栈操作

arm堆栈操作

时间:11-28 来源:互联网 点击:
arm堆栈的组织结构是 满栈降 的形式,满栈即sp是要停留在最后一个进栈元素,降:就是堆栈的增长方向是从高地址向低地址发展。

arm对于堆栈的操作一般采用 LDMFD(pop)和STMFD (push) 两个命令。

以前困惑的就是STMFD 命令 对于操作数 是按照什么顺序压栈的

比如:STMFD sp!{R0-R5,LR} 进栈顺序是:

高地址(1方式)

LR

R5

R4

```````

R0<-sp

低地址

还是:

高地址(2方式)

R0

R1

```

R5

LR <-sp

低地址

现在通过下表,可以轻松的解决这个问题:

寻址方式说明pop=LDMpush=STM
FA递增满LDMFALDMDASTMFASTMIB
FD递减满LDMFDLDMIASTMFDSTMDB
EA递增空LDMEALDMDBSTMEASTMIA
ED递减空LDMEDLDMIBSTMEDSTMDA

按照图表,可知 STMFD对应的是STMDB,根据arm指令手册,可知STMDB入栈顺序是(1方式)

而LDMFD对应的是LDMIA,这样这两个操作就可以成功配对

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top