c - 给定 C 代码的堆栈图

标签 c assembly stack

根据下面的 C 代码,汇编语言 (AVR) 堆栈会是什么样子。

我正在尝试了解 C 代码如何转换为 AVR 汇编语言,并且我需要能够执行以下操作来准备考试中可能出现的编程问题。

int x; 

int foo(char a, int b) {
    int z; 
}

int main() {
    int q = foo('a',0x93); 
}

上面的 C 代码在 AVR 中的堆栈表示是什么?

最佳答案

foo 函数的堆栈帧类似于以下内容:首先是参数,然后是保存的帧指针,返回地址,然后是局部变量。 Int 是 4 个字节,因此程序集自然会从 esp 中减去 4 来为局部变量腾出空间。

这是直观的:

int b     < bottom of stack, highest memory address
char a
ret address
fp
local variables < top of stack, lowest memory address

关于c - 给定 C 代码的堆栈图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29664791/

相关文章:

assembly - 从通用寄存器加载/存储到 xmm/ymm 寄存器/从 xmm/ymm 寄存器加载/存储的最佳方式

windows - 如何使用 `nasm` 和 `alink` 的组合链接 kernel32.lib 和 user32.lib ?

c++ - 为什么 for 循环体中的一个基本算术运算执行得比两个算术运算慢?

c++ - 没有堆栈分配整个程序编译?

linux - 每个进程是否存在内核堆栈?

在 C 中计算传递给 scanf() 的参数

将 char 数组转换为 int 以停止程序

c++ - 如何在 OpenGL 中使用 glOrtho()?

C 重定向指针

c - C语言中,可以通过栈指针访问另一个函数中main函数的局部变量吗?