Почему для вершины стека установлено текущее значение "EP минус один", а не "EP" после возврата из подпрограммы?

Я читаю книгу Роберта В. Себесты "Концепции языков программирования", глава 10. Подпрограмма. И я не понимаю, почему вершина стека установлена ​​на текущее значение EP минус один после возврата из подпрограммы.

Вот предложение, которое я не понимаю.

"По возвращении из подпрограммы вершина стека устанавливается на значение текущего EP минус один, а EP устанавливается на динамическую ссылку из экземпляра записи активации подпрограммы, которая завершила свое выполнение".

Я это понимаю

  1. EP всегда указывает на базу текущего экземпляра записи активации.
  2. При вызове подпрограммы текущее значение EP сохраняется в динамической ссылке в новом экземпляре записи активации.
  3. Затем EP устанавливается как основание для нового экземпляра записи активации.

И после возврата из подпрограммы я думал, что вершина стека установлена ​​на текущее значение EP. Но в книге говорится, что вершина стека установлена ​​на текущее значение EP минус один.

почему ЕР минус один, а не ЕР?

Вот изображение из книги "Концепции языков программирования Роберта В. Себесты"

https://imgur.com/Gk2rE2t

https://imgur.com/2RFebgT

https://imgur.com/fxnfDaj

В качестве 4-го изображения я думаю, что если для вершины стека установлено текущее значение EP минус один, верх стека должен указывать на вершину параметра, а не на вершину функционального значения. Но вершина стека указывает на вершину значения функции.

Пожалуйста, помогите мне понять, что мне не хватает.

0 ответов

Другие вопросы по тегам