笔记—ARM体系结构与编程(汇编指令)第三天

一、栈操作指令

        关于栈操作的基本定义:
                    减栈  向内存地址减小的方向发生变化 
                    增栈  向内存地址增栈的方向发生变化
                    满栈  栈顶有有效数据
                    空栈  栈顶没有有效数据

    注意: 所谓的满栈和空栈,并不是栈空间是满的还是空的!而是看栈顶中是否存在有效数据
    接下来往栈空间中放数据时, 如果需要先改变SP的值, 则为满栈, 如果可以直接放数据, 则为空栈!(sp    即r13寄存器,又名栈指针(stack pointer) )


        两两组合有下列4种栈:
                满减栈        Full  Descending        ARM中默认使用的栈的形式是满减栈 
                满增栈
                空减栈
                空增栈

STMFD           (Push)  Full Descending stack 

LDMFD           (Pop)   Full Descending stack 

STMXX  sp!, {r1, r2, r3, r5, r8}
  @ 将r1, r2, r3, r5, r8 寄存器中的值存放到sp指向的栈空间中

LDMXX  sp!, {r1, r2, r3, r5, r8}
  @ 将sp 指向的栈空间中的数据加载到 r1, r2, r3, r5, r8 寄存器中
 
xx:
      fd   满减          ldmfd sp!,  {r1, r2, r3, r5, r8} 
      fa   满增
      ed  空减
      ea  空增 

实际操作:
    stmfd sp!, {r0-r5, r8}    === push {r0-r5, r8}  压栈操作 
    ldmfd sp!, {r0-r5, r8}    === pop {r0-r5, r8}    弹栈操作
    按满减栈进行压栈, 也按满减栈进行弹栈, 就能恢复寄存器的内容

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值