您的位置 首页 电源

ARM的入栈出栈详细的操作详解

ARM用ADS编译的话,用的是FD满减栈方式。顺便说下满减FD方式,入栈是先移动SP,再存数据;出栈是先存数据,再移SP。我看的资料具体也…

ARM用ADS编译的话,用的是FD 满减 栈方法。趁便说下满减 FD方法,入栈是先移动SP,再存数据;出栈是先存数据,再移SP。

我看的材料详细也就提到这儿了。

看下面的比方:

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,这样这两个操作就能够成功配对

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/dianyuan/274963.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部