获取和执行周期

问题描述

我正在尝试了解 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 (将#修改为@)