一个程序在计算机中到底是如何运行的?

2022/3/10 1:14:43

本文主要是介绍一个程序在计算机中到底是如何运行的?,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

在《载入内存,让程序运行起来》一节中讲到,程序是保存在硬盘中的,要载入内存才能运行,CPU也被设计为只能从内存中读取数据和指令。

对于CPU来说,内存仅仅是一个存放指令和数据的地方,并不能在内存中完成计算功能,例如要计算 a = b + c,必须将 a、b、c 都读取到CPU内部才能进行加法运算。为了了解具体的运算过程,我们不妨先来看一下CPU的结构

CPU是一个复杂的计算机部件,它内部又包含很多小零件,如下图所示:
image

运算单元是CPU的大脑,负责加减乘除、比较、位移等运算工作,每种运算都有对应的电路支持,速度很快

寄存器(Register)是CPU内部非常小、非常快速的存储部件,它的容量很有限,

  • 对于32位的CPU,每个寄存器一般能存储32位(4个字节)的数据,
  • 对于64位的CPU,每个寄存器一般能存储64位(8个字节)的数据。

为了完成各种复杂的功能,现代CPU都内置了几十个甚至上百个的寄存器,嵌入式系统功能单一,寄存器数量较少。

我们经常听说多少位的CPU,指的就是寄存器的的位数。现在个人电脑使用的CPU已经进入了64位时代,例如 Intel 的 Core i3、i5、i7 等。

寄存器在程序的执行过程中至关重要,不可或缺,它们可以用来完成数学运算控制循环次数控制程序的执行流程标记CPU运行状态等。例如,

  • EIP(Extern Instruction Pointer )寄存器的值是下一条指令的地址,CPU执行完当前指令后,会根据 EIP 的值找到下一条指令,改变 EIP 的值,就会改变程序的执行流程;
  • CR3 寄存器保存着当前进程页目录的物理地址,切换进程就会改变 CR3 的值,这将在《MMU部件以及对内存权限的控制》中讲解;EBP、ESP 寄存器用来指向栈的底部和顶部,函数调用会改变 EBP 和 ESP 的值,这将在《栈的概念以及栈溢出》中讲解。


这篇关于一个程序在计算机中到底是如何运行的?的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程