ARM架构--栈

栈的概念

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

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

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

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

栈 是靠编译器进行维护

栈的分类

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

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

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

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

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

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

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

或者

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

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

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

联系C语言:

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

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

相关推荐
群联云防护小杜13 分钟前
构建分布式高防架构实现业务零中断
前端·网络·分布式·tcp/ip·安全·游戏·架构
森焱森1 小时前
垂起固定翼无人机介绍
c语言·单片机·算法·架构·无人机
wenzhangli72 小时前
从源码到思想:OneCode框架模块化设计如何解决前端大型应用痛点
架构·前端框架
秋千码途3 小时前
小架构step系列07:查找日志配置文件
spring boot·后端·架构
Ashlee_code5 小时前
什么是Web3?金融解决方案
开发语言·金融·架构·eclipse·web3·区块链·php
WebInfra7 小时前
如何在程序中嵌入有大量字符串的 HashMap
算法·设计模式·架构
森焱森8 小时前
APM与ChibiOS系统
c语言·单片机·算法·架构·无人机
安思派Anspire9 小时前
LangGraph + MCP + Ollama:构建强大代理 AI 的关键(一)
前端·深度学习·架构
radient10 小时前
Golang-GMP 万字洗髓经
后端·架构
Code季风10 小时前
Gin Web 层集成 Viper 配置文件和 Zap 日志文件指南(下)
前端·微服务·架构·go·gin