我的嵌入式历程 - zjhfqq的BLOG http://zjhfqq.52rd.net - 复制 - 收藏
zjhfqq 发表于 2007-4-20 13:24:00

堆栈寻址的命令LDMFA/STMFA、LDMEA/STMEA、LDMFD/STMFD、LDMED/STMED。

LDM和STM表示多寄存器寻址,即一次可以传送多个寄存器值。
LDM:一次装载多个,这里用来出栈。
STM:一次存储多个,这里用来入栈。

F/E表示指针指向的位置
F:full满堆栈,表示堆栈指针指向最后一个入栈的有效数据项。
E:empty空堆栈,表示堆栈指针指向下一个要放入的空地址。

A/D表示堆栈的生长方式
A:堆栈向高地址生长,即递增堆栈。
D:堆栈向低地址生长,即递减堆栈。
递增递减和硬件无关,这一般是由操作系统决定的。我们一般使用的是递减。LINUX是用递减堆栈。

所以
LDMFD SP!,{R1-R7,LR};将数据出栈,放入R1~R7,LR这8个积存器,同时SP自动更新。这是一个满递减堆栈。
STMFD SP!,{R1-R7,LR};将R1~R7,LR入栈,SP更新。满递减堆栈。

阅读全文(2157) | 评论(2)
评 论
2楼 52RD网友(游客) 发表于 2010-1-25 20:03:00
good
1楼 的(游客) 发表于 2007-6-1 12:59:00
理解深入,很有帮助 啊啊
9 1 :
昵 称: 匿名
验证码: 5670
博 主
进入zjhfqq的首页
博客名称:我的嵌入式历程
日志总数:83
评论数量:161
访问次数:173814
建立时间:2007年3月27日
导 航
日 历
«Mar.2010»
123456
78910111213
14151617181920
21222324252627
28293031
公 告
本博客主要用于记载个人学习笔记与资料收藏,希望对自己和他人都有帮助。其中有些资料都来源于网络,我转载时尽可能地表明文章出处与原作者姓名。
日 志
评 论
链 接