一个程序在计算机中到底是如何运行的?
作者:互联网
在《载入内存,让程序运行起来》一节中讲到,程序是保存在硬盘中的,要载入内存才能运行,CPU也被设计为只能从内存中读取数据和指令。
对于CPU来说,内存仅仅是一个存放指令和数据的地方,并不能在内存中完成计算功能,例如要计算 a = b + c,必须将 a、b、c 都读取到CPU内部才能进行加法运算。为了了解具体的运算过程,我们不妨先来看一下CPU的结构。
CPU是一个复杂的计算机部件,它内部又包含很多小零件,如下图所示:
运算单元是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 的值,这将在《栈的概念以及栈溢出》中讲解。
标签:EIP,计算机,到底,程序,64,内存,寄存器,CPU,运算 来源: https://www.cnblogs.com/zjuhaohaoxuexi/p/15987544.html