我估计好多朋友都好奇 A 函数调用B 函数的时候,若是在A 函数中还有局部变量,那压栈和弹栈怎么操作呢?这一篇文章我们就来说一说。
第一种情况(这个大家都知道):
函数内的局部变量可以用寄存器来表示,则直接将寄存器压栈就好了。
第二种情况:
函数内的局部变量数量超过了寄存器数量。这部分局部变量就是栈帧。而栈帧需要在已有的SP 基础上再申请对应的栈帧空间,用来保存局部变量。所以调用其他函数时,压栈不用担心之前函数的局部变量被覆盖。
c语言里面定义了100个int 字节,空间是 400个字节。
汇编中已经流出来了400个字节空间。sub sp, sp, #416 .
就说到这里吧。大家肯定懂了。