ARM架构--栈

栈的概念

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

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

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

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

栈 是靠编译器进行维护

栈的分类

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

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

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

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

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

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

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

ARM架构--栈_第1张图片

或者

ARM架构--栈_第2张图片

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

ARM架构--栈_第3张图片

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

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

ARM架构--栈_第4张图片

联系C语言:

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

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

ARM架构--栈_第5张图片

你可能感兴趣的:(架构)