8
对于试卷我做我得到了堆栈帧的一个问题:我制作的这个堆栈框架是否正确?
考虑纳达以下功能(由语言),在演讲中使用的语言:
function f(x,y)
begin
var z
z := y - x;
return z * z;
end;
这样的一个函数可以被称为是这样的:
n := f(a+2,b*3)
使用图表来说明你的答案,当上面的函数调用执行,显示了堆栈帧是如何构建在进入功能和销毁解释事件的顺序退出,以及在访问参数x和y以及局部变量z时如何使用基址指针寄存器。
我已经回答了这个问题,这是堆栈帧我公司生产的:
我只是希望有人来纠正这对我来说,如果它的部分是错误的...或者产生一个新的堆栈帧(如果有人有时间)。我真的很感谢你的帮助。
这是假设你的“Nada”语言完全是基于堆栈的还是基于寄存器的? – 2011-06-08 01:37:30
@Hanandel,我不完全确定我认为它们都是。 Nada是一种编程语言,我必须在我的课程中使用它。 – 2011-06-08 01:55:16
我不确定在不知道更多关于“Nada”及其实现的情况下,可以回答这个问题。我的第一个头部倾斜时刻是在新旧堆栈帧中都有'a + 2','b * 3'和'Z'的地方。我不确定这是为什么。并且'b * 3'有意不同于'b + 3'吗?这是我自己的偏见,但是如果没有其他信息,我会倾向于将Nada视为典型的C实现,在这种情况下,我不认为你有什么是对的,尽管我也无法证明它没有'f'被称为_from_的函数的代码。 – 2011-06-08 01:59:06