对于我正在做的问题论文,我对堆栈帧有疑问:
在Nada(一种用语言)中考虑以下函数,这是讲座中使用的语言:
function f(x,y)
begin
var z
z := y - x;
return z * z;
end;
这样的功能可能会这样调用:
n := f(a+2,b*3)
使用图表来说明你的答案,解释上面执行函数调用时的事件序列,显示堆栈帧是如何在进入函数时构建的,并在退出函数时被销毁,以及如何使用基本指针寄存器访问参数x和y以及局部变量z。
时我已经回答了这个问题,这是我制作的堆栈框架:
我只是希望有人为我纠正这个问题,如果它的一部分是错误的......或者产生一个新的堆栈框架(如果有人有时间的话)。我真的很感激你的帮助。
答案 0 :(得分:1)
这取决于调用约定。
但是如果你假设它正在使用_cdecl调用约定,那么你提到了一个基指针:
http://i.stack.imgur.com/5vQVB.jpg
其他调用约定可以使用寄存器等。优化可以进一步改变这一点,因为编译器将内联代码,调用各种东西来重新排列CPU流水线代码等等。