秒懂 堆栈寻址 STMFA STMFD LDMFA LDMED( ARM中的汇编指令)

走过路过的朋友不要错过,看一看点个赞,如果评论更喜欢。😁

堆栈寻址

LDM:(load much)多数据加载,将地址上的值加载到寄存器上
STM:(store much)多数据存储,将寄存器的值存到地址上

堆栈是一种按特定顺序进行存取的存储区。这种特定的顺序可归结为“后进先 岀(LIFO)”或“先进后出(FILO)”。堆栈寻址是隐含的,它使用一个专门的寄存器 (堆栈指针)指向一块存储器区域(堆栈)。栈指针所指定的存储单元就是堆栈的栈顶

存储器堆栈可分为两种:
① 向上生长:即向高地址方向生长,称为递增堆栈(ascending stack)
② 向下生长:即向低地址方向生长,称为递减堆栈(descending stack)

堆栈指针指向最后压入堆栈的有效数据项,称为满堆栈(full stack)
堆栈指针 指向下一个数据项放入的空位置,称为空堆栈(empty stack)

这样就有4种类型的堆栈表示递增和递减的满和空堆栈的各种组合。ARM处 理器支持所有这4种类型的堆栈。

满递增,堆栈通过増大存储器的地址向上增长,堆栈指针指向内含有效数据 项的最高地址。
空递増:堆栈通过增大存储器的地址向上增长,堆栈指针指向堆栈上的第一 个空位置。
满递减:堆栈通过减小存储器的地址向下增长,堆栈指针指向内含有效数据 项的最低地址。
空递减:堆栈通过减小存储器的地址向下増长,堆栈指针指向堆栈下的第一 个空位置。使用进栈(push)向堆栈写数据项,使用出栈(pop)从堆栈读数据项。

看了上面的文字你是不是还不懂,没关系,下面这个图让你一目了然,后文还有代码实例呦,您可以实际操作观看效果
在这里插入图片描述
(LDM)出栈
满递减(FD)加载之后增加地址,空递减(ED)加载之前增加
满递增(FA)加载之后减少地址,空递增(EA)加载之前减少地址
(STM)入栈
满递减(FD)存储之前减少地址,空递减(ED)存储之后减少地址
满递增(FA)存储之前增加地址,空递增(EA)存储之后增加地址
AREA EXP,CODE,READONLY
ENTRY
LDR R1, =0x01010101 ;
LDR R2, =0x02020202 ;
LDR R3, =0x03030303 ;
LDR R13, =0x80800 ;R13作为栈指针,指向了0x80800单元
STMFD R13!, {R1-R3} ;满栈(=先变)、减址的入栈
STMED R13!, {R1-R3} ;空栈(=后变)、减址的入栈
STMFA R13!, {R1-R3} ;满栈、增址的入栈
STMEA R13!, {R1-R3} ;空栈、增址的入栈
RE B HERE
END

  • 24
    点赞
  • 86
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值