在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
芯片精品文章合集(500篇!) 创芯人才网--重磅上线啦!
查看: 1963|回复: 1

[资料] ARM寻址方式——堆栈寻址

[复制链接]
发表于 2015-12-24 16:26:03 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x

从内存管理的角度看,堆栈时一块用于保存数据的连续内存,也就是一种按特定顺序进行数据存取的存储区,这种特定的顺序可归纳为“后进先出”或“先进后出”。指向堆栈的地址寄存器成为堆栈指针,堆栈的访问时通过堆栈指针来实现的。

堆栈既可以向下增长,也可以向上增长,这就是堆栈的2种增长方式。

向上增长:即访问寄存器时,存储器的地址向高地址方向增长,称为递增堆栈。

向下增长:即访问存储器时,存储器的地址向低地址方向增长,称为递减堆栈。

满堆栈:堆栈指针指向最后压入堆栈的数据或者指向第一个要读出的数据。

空堆栈:堆栈指针指向最后压入堆栈的数据的上一个或下一个空位置,或者指向第一个要读出的数据的上一个或下一个空位置。

根据以上的描述说明,堆栈有4种形式,分别是由递增、递减、满栈、空栈组成的所有组合。ARM处理器支持者4种形式的堆栈。

满递增:堆栈随着寄存器地址的增大而向上增长,基址寄存器指向存储有效数据的最高地址或者指向第一个要读出的数据位置。

空递增:堆栈随着存储器地址的增大而向上增长,基址寄存器指向存储有效数据的最高地址的上一个空位置或者指向将要读出的第一个数据位置的上一个空位置。

满递减:堆栈随着存储器地址的减小而向下增长,基址寄存器指向存储有效数据的最低地址或者指向第一个要读出的数据位置。

空递减:堆栈随着存储器地址的减小而向下增长,基址寄存器指向最后压入堆栈的数据的下一个空位置或者指向将要读出的第一个数据位置的下一个空位置。

ARM指令中,堆栈寻址通过Load/Store指令来实现。

例如:

       STMFD          SP!         {R1-R7,LR}          ;R1-R7LR入栈

       LSMFD          SP!         {R1-R7,LR}          ;数据出栈,放入R1~R7LR寄存器

Thumb指令中,堆栈寻址通过PUSH/POP指令来实现,例如:

       PUSH            {R1-R7,LR}                        ; R1-R7LR入栈

       POP               {R1-R7,PC}                        ;数据出栈,放入R1~R7PC寄存器

凌阳教育,专注嵌入式人才培养多年,完善的培养方案,强大的师资,合理的课程安排,成功从小白蜕变为嵌入式工程师。想了解凌阳教育,或者获得更多嵌入式学习资料的免费下载,请点击www.sunplusedu.com访问凌阳教育官网




发表于 2018-12-20 10:25:42 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-29 09:43 , Processed in 0.014897 second(s), 9 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表