如何解决获取和执行周期
我正在尝试了解 cpu 的指令周期以及它如何执行指令。
据我所知,当程序被编译为二进制文件时,它会存储在硬盘驱动器上。当您运行程序时,二进制执行代码被加载到 RAM 中,二进制文件驻留在进程内存空间的 .text 区域中。但是,我对为什么返回地址需要存储在堆栈上感到困惑。如果我们执行 10 条指令,假设第三条指令是函数调用,内核开始为函数和返回地址分配内存。我已经读过返回地址是来自 EIP 寄存器的下一条指令。这里,返回地址是否是位于内存中的第 4 条指令,以便当函数的堆栈再次被拆除时,我们的指令将从第 4 条继续执行?函数执行时,指令是不是从第3条跳到第8条?
如果有帮助,这是来源: https://www.csee.umbc.edu/~chang/cs313.s02/stack.shtml
接下来, main 一次推送一个 foo 的参数,最后一个参数 首先进入堆栈。例如,如果函数调用是:
a = foo(12,15,18) ; The assembly language instructions might be:
push dword 18
push dword 15
push dword 12 Finally,main can issue the subroutine call instruction:
call foo
当调用指令执行时,EIP寄存器的内容被压入堆栈。自 EIP register指向main中的下一条指令,作用是 返回地址现在位于堆栈的顶部。通话后 指令,下一个执行周期从名为 foo 的标签开始。 图 2 显示了调用指令后堆栈的内容。 图 2 和后续图中的红线表示顶部 在启动函数的指令之前的堆栈 调用过程。我们会看到,在整个函数调用之后 完成后,栈顶会恢复到这个位置
感谢任何帮助,谢谢
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。