我生产的这个堆叠框架是对的吗?

时间:2011-06-08 01:34:48

标签: compiler-construction stack frame

对于我正在做的问题论文,我对堆栈帧有疑问:

在Nada(一种用语言)中考虑以下函数,这是讲座中使用的语言:

function f(x,y)
begin
var z
z := y - x;
return z * z;
end;

这样的功能可能会这样调用:

n := f(a+2,b*3)

使用图表来说明你的答案,解释上面执行函数调用时的事件序列,显示堆栈帧是如何在进入函数时构建的,并在退出函数时被销毁,以及如何使用基本指针寄存器访问参数x和y以及局部变量z。

我已经回答了这个问题,这是我制作的堆栈框架:

sackframe I produced

我只是希望有人为我纠正这个问题,如果它的一部分是错误的......或者产生一个新的堆栈框架(如果有人有时间的话)。我真的很感激你的帮助。

1 个答案:

答案 0 :(得分:1)

这取决于调用约定。

但是如果你假设它正在使用_cdecl调用约定,那么你提到了一个基指针:

http://i.stack.imgur.com/5vQVB.jpg

其他调用约定可以使用寄存器等。优化可以进一步改变这一点,因为编译器将内联代码,调用各种东西来重新排列CPU流水线代码等等。