解释CPU到底如何执行程序及取译码执行(Fetch-Decode-Execute Cycle)

news/2025/2/23 15:28:30

现代的生活中电脑无处不在,我们都知道电脑的核心部件就是CPU,那CPU是如何工作的,是如何执行程序的呢?

大多数现代处理器的工作原理是取译码执行(Fetch-Decode-Execute Cycle)
也被称为冯·诺依曼架构(Von Neumann Architecture)。这是一种将程序指令存储器和数据存储器合并在一起的计算机设计概念结构。下图为冯·诺依曼架构框架:
在这里插入图片描述
简单来说,冯·诺依曼架构由五个部件组成,分别为输入(input)、输出(output)、运算器(Arithmetic Logic Unit)、存储器(Memory)、控制器(Control Unit)
其中,运算器、控制器都在CPU中央处理器中。
存储器也可以分为内存、外存。

当执行一组指令时,指令和数据被加载到主内存中。第一个指令的地址被复制到程序计数器中。处理器执行指令分为三个部分。这些部分是获取(Fetch)、解码(Decode)和执行(Execute)。
在这里插入图片描述

1. 获取(Fetch)
这就是装载需要执行的指令到IR的过程。首先将PC寄存器的内容装入MAR,并且将PC寄存器的值+1(因为我们完成当前这一条指令之后还需要继续进行下一条,就是通过这种方式来实现指令的顺序执行的)。然后将地址指向的内容装入MDR,最后控制单元将MDR中的内容送入IR,至此,我们完成了指令的读取.

2. 译码(Decode)
在这个步骤中,指令由处理器解码。如果指令需要,处理器将获得任何操作数。例如,指令MOV AX, 0。将值0存储在Ax寄存器中。在执行指令之前,处理器将从内存中的下一个位置获取常数值0。

3. 执行(Execute)
在最后一个阶段,处理器执行指令,它在寄存器AX中存储0。
处理器执行指令MOV AX, 0。最后,它调整指令指针指向存储在地址0102的下一条要执行的指令。


http://www.niftyadmin.cn/n/4479903.html

相关文章

Android中用到的MVP模式

参考:android架构设计—mvp模式封装 MVP模式是由MVC模式逐渐演化出来的。首先简单介绍一下MVC。这个在Spring框架里面是一个很常见的模式。 MVC M(model)模型, 是应用程序中用于处理应用数据逻辑的部分,通常模型对象负责在数据库…

C语言之#define

文章目录一.什么是#define二.#define的一般形式三.#define如何工作?四.终止宏 #undef五.注意六.define与const区别一.什么是#define C语言中,可以用 #define 定义一个标识符来表示一个常量。 特点是:定义的标识符不占内存,只是一…

C语言基本数据类型int, short int, long int, long long int, unsigned int, signed int等解析

一. 普通int类型 int类型是有符号整型,即int类型的值必须是整数,可以是正整数,负整数,零。 int类型取值范围因计算机系统而异。早起的16位IBM PC兼容机使用16位来存储一个int值,其取值范围是-32769 ~32768…

C语言 getchar()原理及易错点解析

文章目录一.getchar()系列1.getchar()工作原理及作用2.使用getchar()清理回车\n3.使用getchar()清理缓存4.混合scanf()与getchar()一.getchar()系列 1.getchar()工作原理及作用 工作原理:getchar()是stdio.h中的库函数,它的作用是从stdin流中读入一个字…

C语言之 指针与多维数组最强解析

假设有以下声明: int multiArray [4] [2] //声明一个int类型的二维数组数组名multiArray是该数组首元素( multiArray[0] )的地址。 在本例中,multiArray的首元素是一个内含两个int值的数组,所以multiArray是这个内含两个int值的数组的地…

C语言字符串的输出与输入学习笔记

文章目录字符串的输入与输入1.字符串初始化1⃣️:用足够的空间的数组存储字符串:2⃣️:省略数组初始化声明中的大小2.数组与指针1⃣️:指针创建字符串2⃣️:数组与指针的区别3⃣️:使用指针的优缺点3.scanf…

C语言fgets()与fputs()详解

文章目录fgets()与fputs()1⃣️fgets()优缺点:2⃣️fgets()返回值:3⃣️fgets()操作实例:3⃣️fgets()操作进阶:fgets()与fputs() fgets()函数的第二个参数指明了读入字符的最大数量。如果该参数为n,那么fgets函数将读…

深入了解JVM—什么是虚拟机

我们都知道在 Windows 系统上一个软件包装包是 exe 后缀的,而这个软件包在苹果的 Mac OSX 系统上是无法安装的。类似地,Mac OSX 系统上软件安装包则是 dmg 后缀,同样无法在 Windows 系统上安装。 为什么不同系统上的软件无法安装&#xff0c…