程序执行

程序计算器周期性的指向下一条指令,CPU 执行指令时会根据指令名称选择具体运算(加/减/乘/除/移),再根据指令上的地址从内存寻找到数据值,执行完毕又把值传输到内存对应地址。首先要理解的是一个非常重要的概念,栈,是计算机科学中一种特殊的串列形式的数据结构,其特殊之处在于只能允许在链接串列或阵列的一端(称为堆叠顶端指标 top)进行加入数据(push)和输出数据(pop)的运算。

基于这种内存模型,我们分三种情况讨论:

  • 顺序执行:代码编译成一条条的指令加载到内存(操作系统分配的代码执行区域),由于是顺序执行,程序计数器将逐步执行内存的执行,最后返回结果。

  • 分支选择:当指令执行完遇到分支的时候,会根据返回的地址跳转到对应位置执行下一条指令。

  • 嵌套执行:为了代码复用,我们会把一些常用的代码封装起来,称为函数。带代码执行到函数的位置,就要等待嵌套函数执行完,才能接着往下走。

过程是一种抽象机制,用一组参数和可选返回值实现某一功能,包含:函数,方法,子例程,处理函数。一个函数出现就会在内存区域开辟一段新的连续内存空间。函数代码执行前根据参数数量,参数大小,计算分配栈空间,栈底为内存高地址方向。入栈过程栈指针地址减少,出栈过程栈指针地址增加。当前执行过程的活动记录,由标记顶部位置的帧指针(frame point)和标记底部位置的栈指针(stack point)定义。当函数执行完毕,返回下一条指令地址给到帧指针的位置。