【问题标题】:Diagram of Stack Given C Code给定 C 代码的堆栈图
【发布时间】:2015-04-16 03:24:40
【问题描述】:

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

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

int x; 

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

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

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

【问题讨论】:

  • 这取决于使用的编译器,以及使用什么ABI
  • @JoachimPileborg 我只需要一个粗略的通用方法。无需详细说明。

标签: c assembly stack


【解决方案1】:

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

【讨论】:

  • 在 AVR 上看到 ESP 寄存器会很惊讶
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-23
  • 1970-01-01
  • 2011-08-07
  • 1970-01-01
  • 2013-01-25
  • 2011-12-05
  • 1970-01-01
相关资源
最近更新 更多