• ARM架构--栈


    栈的概念

        栈的本质就是一段内存,程序运行时用于保存一些临时数据

        如局部变量、函数的参数、返回值、以及程序跳转时需要保护的寄存器等

    在高级语言里面,操作的是变量。在ARM汇编里面,操作的是寄存器(register)、内存和栈(stack)。

    堆 需要用户通过malloc去申请和释放

    栈 是靠编译器进行维护

    栈的分类

        增栈:压栈时栈指针越来越大,出栈时栈指针越来越小

        减栈:压栈时栈指针越来越大,出栈时栈指针越来越小

        满栈:栈指针指向最后一次压入到栈中的数据,压栈时需要先移动栈指针到相邻位置然后再压栈

        空栈:栈指针指向最后一次压入到栈中的数据的相邻位置,压栈时可直接压栈,之后需要将栈指针移动到相邻位置

    栈分为空增(EA)、空减(ED)、满增(FA)、满减(FD)四种

       ARM处理器一般使用满减栈         从高地址往低地址存     STMDB指令存储                                                                                                                              使用LDMIA读取

    压栈和出栈的本质就是读写内存

    或者

    栈的使用实例-----子函数的调用过程(叶子函数)

    因此  ,C语言中的子函数 汇编后一般都是压栈保护现场,结束时再进行出栈

    栈的使用实例-----子函数的调用过程(非叶子函数)

    联系C语言:

    局部变量存在于栈中,如果不初始化的话是一个随机值

    全局变量不初始化则为0,因为编译器会把他存放在BSS段,会把他全部清零

  • 相关阅读:
    Windows下编译Mediapipe,C++版本
    【JavaScript】video标签配置及相关事件:
    c#优雅高效的读取字节数组——不安全代码(1)
    手把手教你做测开:开发Web平台之图书新增
    Js节流防抖函数封装学习
    二分模板代码
    电阻电路等效变换(Ⅲ)
    Java类和对象
    频域中的后门攻击论文笔记
    KEPServerEX 6.12.325.0 发布说明
  • 原文地址:https://blog.csdn.net/2302_76785838/article/details/132841178