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

Mr *_*eth 8 compiler-construction stack frame

对于我正在做的问题文件,我在堆栈框架上有一个问题:

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

function f(x,y)
begin
var z
z := y - x;
return z * z;
end;
Run Code Online (Sandbox Code Playgroud)

这样的函数可能会像这样调用:

n := f(a+2,b*3)
Run Code Online (Sandbox Code Playgroud)

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

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

我制作的大袋

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

小智 1

这取决于调用约定。

但是如果您假设它使用 _cdecl 调用约定,因为您提到了基指针:

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

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