2017-11-25 399 views
0

原始问题是: 当执行程序在以下骨架程序中达到位置1时,显示包含所有活动记录实例(包括静态链和动态链)的堆栈。假设Bigsub为第1级实现子程序 - 活动记录实例堆栈描述

enter image description here

答案是: enter image description here

但我想答案是错的,因为静态链接应指向它的静态父母的底部ARI,而不是顶端,只是动态链接应该指向顶端。

例如,B和C的静态链接应该指向A的底部,而不是A的顶部,并且A的静态链接应该指向BIGSUB的底部,不是吗? 谢谢。

回答

0

激活记录的布局取决于实施。查看使用记录的伪代码应该让你知道这个例子是否正确。这是一个创纪录的顶部/底部依赖于实现(我将使用顶部你在下面做了,虽然它是底部给我)。

在这个例子中,指向记录的另一端(“顶部”)是不必要的,因为这些地址总是在STACK[DYNAMIC_LINK_ADDRESS]+1。 V 示例中的例程没有定义参数或局部变量,这使得难以想象如何使用激活记录。

如果每个例程定义了XY变量,那么堆栈可能看起来像下面的伪表,动态和静态链接都指向参数和变量可以在堆栈中使用正偏移量当变量为本地或非本地时,使用相同的偏移量;对于A)的激活记录,A.X+02

N-17: DL -> 12 
N-16: SL -> 07 
N-15: B.X 
N-14: B.Y 
N-13: RET C 
N-12: DL -> 07 
N-11: SL -> 07 
N-10: C.X 
N-09: C.Y 
N-08: RET A 
N-07: DL -> 02 
N-06: SL -> 02 
N-05: A.X 
N-04: A.Y 
N-03: RET BITSUB 
N-02: BIGSUB.X 
N-01: BIGSUB.Y