我对此很陌生,并且有一些问题希望您能帮助理解它。
调用过程时必须做的第一件事是保存前一个 FP(因此它可以在过程退出时恢复)。然后它将 SP 复制到 FP 以创建新的 FP,并推进 SP 为局部变量保留空间。这段代码称为过程序言。在过程退出时,必须再次清理堆栈,这称为过程结语。已提供 Intel ENTER 和 LEAVE 指令以及 Motorola LINK 和 UNLINK 指令,以有效地完成大部分程序 prolog 和 epilog 工作。
上述文字引用自砸叠纸,我发现以下问题很难理解:
“程序在调用时必须做的第一件事是保存以前的 FP(这样它可以在程序退出时恢复)。然后它将 SP 复制到 FP 以创建新的 FP”
1) 将 SP 复制到 FP 是否会删除保存的 FP 值 - 应该保存?
“然后它将 SP 复制到 FP 以创建新的 FP,并推进 SP 为局部变量保留空间。”
2)为什么需要提前SP?推入局部变量时不应该自动递减吗?
3) 在不调用任何子程序的情况下启动主函数时SP、IP和FP的值是多少?