我制作的这个栈帧对吗?

发布于 2024-11-14 19:08:02 字数 498 浏览 4 评论 0原文

对于我正在做的一份试卷,我有一个关于堆栈框架的问题:

考虑讲座中使用的 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 generated

我只是希望有人纠正这个问题如果其中部分错误,请告诉我...或者生成一个新的堆栈框架(如果有人有时间)。我将非常感谢您的帮助。

For a question paper i'm doing I got a question on stack frames:

Consider the following function in Nada (a made up language), the language used in the lectures:

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

Such a function might be called like this:

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

Using diagrams to illustrate your answer, explain the sequence of events when the function call above is executed, showing how the stack frame is built on entry to the function and destroyed on exit from it, and how the base pointer register is used when accessing the parameters x and y and the local variable z.

I've answered this question and this is the stack frame I produced:

sackframe I produced

I just want someone to correct this for me if parts of it are wrong...or produce a new stack frame (if anyone's got the time). I'll really appreciate the help.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

身边 2024-11-21 19:08:02

这取决于调用约定。

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

https://i。 sstatic.net/5vQVB.jpg

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

It depends on the calling conventions.

But if you assume that it is using _cdecl calling convention, since you mention a base pointer:

https://i.sstatic.net/5vQVB.jpg

Other calling conventions can use registers, etc. Optimizations can further change this, as the compiler will inline code, do call kinds of things with to rearrange the code for CPU pipelining, etc.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文