Assembly 程序序言说明

Assembly 程序序言说明,assembly,stack,stack-overflow,subroutine,Assembly,Stack,Stack Overflow,Subroutine,我对这一点很陌生,有一些问题我希望你能帮助我理解 调用过程时必须做的第一件事是保存上一个 FP,以便在过程退出时恢复。然后它将SP复制到 FP创建新的FP,并使SP前进以为 局部变量。这段代码称为prolog过程。在上面 程序退出时,必须再次清理堆栈,称为 程序结束。英特尔输入和输出指令以及 摩托罗拉的链接和取消链接指令,已经提供了做最多 prolog和epilog程序的运行效率很高 上面这段文字是引用《砸叠纸》一文,我发现很难理解以下问题: 调用过程时必须做的第一件事是保存上一个 FP,以便在

我对这一点很陌生,有一些问题我希望你能帮助我理解

调用过程时必须做的第一件事是保存上一个 FP,以便在过程退出时恢复。然后它将SP复制到 FP创建新的FP,并使SP前进以为 局部变量。这段代码称为prolog过程。在上面 程序退出时,必须再次清理堆栈,称为 程序结束。英特尔输入和输出指令以及 摩托罗拉的链接和取消链接指令,已经提供了做最多 prolog和epilog程序的运行效率很高

上面这段文字是引用《砸叠纸》一文,我发现很难理解以下问题:

调用过程时必须做的第一件事是保存上一个 FP,以便在过程退出时恢复。然后它将SP复制到 FP以创建新的FP

1将SP复制到FP是否会删除已保存的FP值-应该保存的值

然后将SP复制到FP以创建新的FP,并将SP升级到FP 为局部变量保留空间

2为什么需要推进SP?当局部变量被推入时,它不应该自动递减吗

3在不调用任何子程序的情况下启动主函数时,SP、IP和FP的值是多少

1将SP复制到FP是否会删除已保存的FP值-应该保存的值

将堆栈指针复制到Intel上的帧指针寄存器e/bp会覆盖上一个值,是的,但您只是在上一步中将该值精确地保存在堆栈上,以便在退出时恢复该值

2为什么需要推进SP?当局部变量被推入时,它不应该自动递减吗

是的,push可以做到这一点,但这一步通常是通过Intel上的mov完成的,mov不会修改堆栈指针

3在不调用任何子程序的情况下启动主函数时,SP、IP和FP的值是多少

显然,IP指向主指令中的第一条指令。堆栈指针指向保存在堆栈上的最后一项。帧指针通常指向调用main的操作系统函数的帧