从子程序返回后,为什么栈顶设置为当前值“ EP减一”,而不是“ EP”?

时间:2019-10-04 15:07:30

标签: c callstack stack-frame stack-pointer activation-record

我正在阅读Robert W. Sebesta第10章子程序中的“编程语言的概念”一书。 而且我不明白为什么从子程序返回后,栈顶设置为EP的当前值减去一。

这是我不明白的句子。

“从子程序返回时,将栈顶设置为当前EP的值减1,然后将EP设置为已完成执行的子程序的激活记录实例的动态链接。”

我了解

  1. EP总是指向当前激活记录实例的基础。
  2. 调用子程序时,EP的当前值保存在新激活记录实例的动态链接中。
  3. 然后,将EP设置为新激活记录实例的基础。

从子程序返回后,我认为堆栈顶部已设置为EP的当前值。但书中说,栈顶设置为当前EP值减一。

为什么EP减1,而不是EP?

这是《罗伯特·W·塞贝斯塔编程语言的概念》一书中的图片

https://imgur.com/cTHLUJx

https://imgur.com/Gk2rE2t

https://imgur.com/2RFebgT

https://imgur.com/fxnfDaj

作为第四张图片, 我认为如果将堆栈顶部设置为EP的当前值减一,则堆栈顶部应指向参数的顶部,而不是功能值的顶部。但是栈顶指向函数值的顶部。

请帮助我找出我所缺少的内容。

0 个答案:

没有答案