ARM架构--栈

栈的概念

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

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

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

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

栈 是靠编译器进行维护

栈的分类

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

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

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

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

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

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

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

或者

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

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

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

联系C语言:

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

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

相关推荐
weixin_66817 小时前
BPMN.io全方位深度分析报告架构解析 - AI分析分享
人工智能·架构·开源
桌面运维家17 小时前
DNS负载均衡:架构、优化与故障排查指南
运维·架构·负载均衡
AI成长日志18 小时前
【扩散模型专栏】文本到图像生成实战:Stable Diffusion架构解析与代码实现
人工智能·stable diffusion·架构
AAA阿giao18 小时前
从零到精通 NestJS:深度剖析待办事项(Todos)项目,全面解析 Nest 架构、模块与数据流
架构·typescript·node.js·nestjs·全栈开发·后端框架
学不完的18 小时前
ZrLog 高可用反向代理架构
linux·运维·nginx·架构·负载均衡
大侠区块链18 小时前
【2026】AI Agent 生产环境踩坑实录:错误放大效应、权限失控与架构选型
人工智能·架构
تچ快乐杂货店يچ18 小时前
基于前后端分离的在线考试系统(微服务架构 + RBAC权限 + AI助手)
java·vue.js·spring boot·spring cloud·微服务·架构·typescript
guoji778818 小时前
Gemini官网技术路线深度拆解:从原生多模态到智能体时代的架构演进
架构
万象.18 小时前
docker网络种类,架构及命令
网络·docker·架构
const_qiu19 小时前
测试左移实践:在开发阶段构建质量防线
架构·可用性测试