cortex-M 进程里面的局部变量处理方法

本文详细解释了C语言中A函数调用B函数时,当局部变量使用寄存器和超过寄存器数量时的压栈与弹栈操作,以及栈帧的分配过程。通过实例说明了如何在汇编层面实现100个int变量所需的400字节空间分配和调整SP的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        我估计好多朋友都好奇 A 函数调用B 函数的时候,若是在A 函数中还有局部变量,那压栈和弹栈怎么操作呢?这一篇文章我们就来说一说。

第一种情况(这个大家都知道):

        函数内的局部变量可以用寄存器来表示,则直接将寄存器压栈就好了。

第二种情况:

        函数内的局部变量数量超过了寄存器数量。这部分局部变量就是栈帧。而栈帧需要在已有的SP 基础上再申请对应的栈帧空间,用来保存局部变量。所以调用其他函数时,压栈不用担心之前函数的局部变量被覆盖。

c语言里面定义了100个int  字节,空间是 400个字节。

汇编中已经流出来了400个字节空间。sub  sp, sp, #416 . 

就说到这里吧。大家肯定懂了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值