ARM架构--栈

栈的概念

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

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

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

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

栈 是靠编译器进行维护

栈的分类

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

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

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

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

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

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

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

或者

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

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

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

联系C语言:

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

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

相关推荐
虚伪的空想家1 小时前
华为A800I A2 arm64架构鲲鹏920cpu的ubuntu22.04 tls配置直通的grub配置
ubuntu·华为·架构·虚拟化·kvm·npu·国产化适配
Tadas-Gao1 小时前
MySQL存储架构解析:从数据无序到索引艺术的演进
数据库·分布式·mysql·微服务·云原生·架构
CV_J2 小时前
编写微服务api
微服务·云原生·架构
brzhang3 小时前
我觉得可以试试 TOON —— 一个为 LLM 而生的极致压缩数据格式
前端·后端·架构
黄暄4 小时前
微服务面试题(14题)
java·spring cloud·微服务·架构·java-rabbitmq·java-zookeeper
常先森5 小时前
【解密源码】 RAGFlow 切分最佳实践- naive parser 语义切块(excel & csv & txt 篇)
架构·llm·agent
Cxzzzzzzzzzz7 小时前
Kubernetes 架构
容器·架构·kubernetes
leafff1238 小时前
一文了解LLM应用架构:从Prompt到Multi-Agent
人工智能·架构·prompt
虾米Life11 小时前
基于微服务脚手架的视频点播系统 (仿B站) [客户端] -1
c++·qt·微服务·架构
悠闲蜗牛�11 小时前
智能时代技术融合之道:大模型、微服务与数据安全的系统化实践
微服务·云原生·架构