arm里满堆栈与空堆栈的涵义以及后缀问题

初学ARM指令时,一直纠结满堆栈与空堆栈,按字面意思理解,也即数据结构上的定义,空堆栈就是没有放数据的堆栈,而满堆栈就是放满的堆栈。
but注意看书上的定义呀啊:

  • 空堆栈:当堆栈指针指向下一个空位置时,称为空堆栈
  • 满堆栈:如果堆栈指针总是指向最后压入堆栈的数据,称为满堆栈

所以,这里的空满根本不表示堆栈的存储状态,只是来说明堆栈指针指向的存储单元是否已经保存有堆栈数据,或者说入栈时是否可以直接向堆栈指针指向的存储单元写入数据。这就是“满堆栈”与“空堆栈”。博主的理解就是,空满只是表示指针指向单元的状态。
接下来再来说说什么叫向上增长和向下增长,递增堆栈和递减堆栈,哎呀呀,当时对这个定义也是傻傻分不清。

  • 递增堆栈:向高地址方向生长
    递减堆栈: 向低地址方向生长
    用个不是很形象的图来示意一下,老师上课的课件:
    在这里插入图片描述

为什么说“向上生长”和“向下生长”呢?那是以为,一般画堆栈示意图都是把低地址画在下面,高地址画在上面。

OK,那么再来说说与之相关的后缀问题:

  • 索引后缀(IA,IB,DA,DB)----用于数据块的传送,地址基址不能用SP(R13)寄存器
    先说明字母代表含义,方便记忆

I–Icrement
A—After
B–Before
D–Decrement

IA—事后递增,即每次传递后基址加4,指向下一个字
IB—事先递增,即每次传递前基址加4,指向本次传送的字所在存储单元
DA—事后递减,即每次传递后地址减4,指向下一个字
DB—事前递减,即每次传递前地址减4,指向本次传送的字

  • 堆栈后缀(FD,FA,ED,EA)----地址基址必须使用SP(R13),堆栈堆栈嘛肯定是使用堆栈区了

F—Full
D—Descending(减)
E–Empty
A—Ascending(增)

在这里插入图片描述

再来讨论下块复制问题:
具体使用哪条指令,还要基于数据存储在基址寄存器之上还是之下,地址在存储第一个之前还是之后增加。
相应指令搭配看下图:
在这里插入图片描述

就以第一个框里的STMIB STMFA为例说明
STMIB:传递前递增(索引方式)
SYMFA:满递增堆栈

  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值