关于CPU

news/2025/1/26 17:35:10/

关于CPU的相关知识

简单介绍:

CPU 的全称是Central Processing Unit。CPU 是计算机的核心组件, 与计算机的关系相当于大脑和人的关系。CPU 的核心是从程序或应用程序获取指令并执行计算。此过程可以分为三个关键阶段:提取,解码和执行

CPU从系统的主存中提取指令,然后解码该指令的实际内容,然后再由 CPU 的相关部分执行该指令。

CPU 内部处理过程:

CPU 负责的就是解释和运行最终转换成机器语言的内容。

CPU 主要由两部分构成:控制单元和算数逻辑单元(ALU)

  • 控制单元:从内存中提取指令并解码执行

  • 算数逻辑单元(ALU):处理算数和逻辑运算

CPU 是计算机的心脏和大脑,它和内存都是由许多晶体管组成的电子部件。它接收数据输入,执行指令并处理信息。它与输入/输出(I/O)设备进行通信,这些设备向 CPU 发送数据和从 CPU 接收数据。

CPU组成:

寄存器、控制器、运算器和时钟

寄存器:

是中央处理器内的组成部分。它们可以用来暂存指令、数据和地址。可以将其看作是内存的一种。根据种类的不同,一个 CPU 内部会有 20-100个寄存器。

控制器:

负责把内存上的指令、数据读入寄存器,并根据指令的结果控制计算机

运算器:

负责运算从内存中读入寄存器的数据

时钟:

负责发出CPU开始计时的时钟信号

CPU 是一系列寄存器的集合体

寄存器种类:

种类功能
累加寄存器存储运行的数据和运算后的数据
标志寄存器用于反应处理器的状态和运算结果的某些特征以及控制指令的执行
程序计数器程序计数器是用于存放下一条指令所在单元的地址的地方
基址寄存器存储数据内存的起始位置
变址寄存器存储基址寄存器的相对地址
通用寄存器存储任意数据
指令寄存器储存正在被运行的指令,CPU内部使用,程序员无法对该寄存器进行读写
栈寄存器存储栈区域起始位置

 

 

 

 

 

 

 

 

 

 

其中程序计数器、累加寄存器、标志寄存器、指令寄存器和栈寄存器都只有一个,其他寄存器一般有多个。

程序计数器:用来存储下一条指令所在单元的地址

程序执行时,PC的初值为程序第一条指令的地址,在顺序执行程序时,控制器首先按程序计数器所指出的指令地址从内存中取出一条指令,然后分析和执行该指令,同时将PC的值加1指向下一条要执行的指令。

条件分支和循环机制

高级语言中的条件控制流程主要分为三种:顺序执行、条件分支、循环判断三种,顺序执行是按照地址的内容顺序的执行指令。条件分支是根据条件执行任意地址的指令。循环是重复执行同一地址的指令

  • 顺序执行的情况比较简单,每执行一条指令程序计数器的值就是 + 1。

  • 条件和循环分支会使程序计数器的值指向任意的地址,这样一来,程序便可以返回到上一个地址来重复执行同一个指令,或者跳转到任意指令。

标志寄存器

条件和循环分支会使用到jump(跳转指令) ,会根据当前的指令来判断是否跳转,无论当前累加寄存器的运算结果是正数、负数还是零,标志寄存器都会将其保存

CPU 在进行运算时,标志寄存器的数值会根据当前运算的结果自动设定,运算结果的正、负和零三种状态由标志寄存器的三个位表示。标志寄存器的第一个字节位、第二个字节位、第三个字节位各自的结果都为1时,分别代表着正数、零和负数。

 

函数调用机制

函数调用处理是通过把程序计数器的值设定成函数的存储地址来实现的。函数执行跳转指令后,必须进行返回处理,单纯的指令跳转没有意义,下面是一个实现函数跳转的例子

 

函数的调用和返回很重要的两个指令是 call和 return指令,再将函数的入口地址设定到程序计数器之前,call 指令会把调用函数后要执行的指令地址存储在名为栈的主存内。函数处理完毕后,再通过函数的出口来执行 return 指令。return 指令的功能是把保存在栈中的地址设定到程序计数器。MyFun 函数在被调用之前,0154 地址保存在栈中,MyFun 函数处理完成后,会把 0154 的地址保存在程序计数器中。

 

在一些高级语言的条件或者循环语句中,函数调用的处理会转换成 call 指令,函数结束后的处理则会转换成 return 指令。

通过地址和索引实现数组

接下来我们看一下基址寄存器和变址寄存器,通过这两个寄存器,我们可以对主存上的特定区域进行划分,来实现类似数组的操作,首先,我们用十六进制数将计算机内存上的 00000000 - FFFFFFFF 的地址划分出来。那么,凡是该范围的内存地址,只要有一个 32 位的寄存器,便可查看全部地址。但如果想要想数组那样分割特定的内存区域以达到连续查看的目的的话,使用两个寄存器会更加方便。

CPU 指令执行过程

几乎所有的冯·诺伊曼型计算机的CPU,其工作都可以分为5个阶段:取指令、指令译码、执行指令、访存取数、结果写回

  • 取指令阶段是将内存中的指令读取到 CPU 中寄存器的过程,程序寄存器用于存储下一条指令所在的地址

  • 指令译码阶段,在取指令完成后,立马进入指令译码阶段,在指令译码阶段,指令译码器按照预定的指令格式,对取回的指令进行拆分和解释,识别区分出不同的指令类别以及各种获取操作数的方法。

  • 执行指令阶段,译码完成后,就需要执行这一条指令了,此阶段的任务是完成指令所规定的各种操作,具体实现指令的功能。

  • 访问取数阶段,根据指令的需要,有可能需要从内存中提取数据,此阶段的任务是:根据指令地址码,得到操作数在主存中的地址,并从主存中读取该操作数用于运算。

  • 结果写回阶段,作为最后一个阶段,结果写回(Write Back,WB)阶段把执行指令阶段的运行结果数据“写回”到某种存储形式:结果数据经常被写到CPU的内部寄存器中,以便被后续的指令快速地存取;

参考链接:

https://mp.weixin.qq.com/s/ttncekujB82g88GRx3a6lQ


http://www.ppmy.cn/news/934208.html

相关文章

Java final 关键字和instanceof 关键字

Java final 关键字 在Java中,final关键字用于表示常量。它可以与变量,方法和类一起使用。 任何实体(变量,方法或类)一旦被声明final后,只能分配一次。也就是: final变量不能用另一个值重新初始…

bfprt算法-查找无序数组中第k小的数字(java)

bfprt 算法 在无序数组中找到第K小的数解法一 改写快排代码演示bfprt 算法代码演示 找出第K个最大元素 在无序数组中找到第K小的数 在无序数组中找到第K小的数,时间复杂度要求是O(n). 解法一 改写快排 再学习bfprt算法之前,先看下,如何通过改写快排的方式…

什么是D5、D9、D10和D18

DVD光盘由上下两片片基组成,每片片基上最多可以容纳两层数据,DVD光头能够通过调整焦距来读取这两层数据。 D5 ,DVD-5 的简写,即单面单层光盘,最大容量4.7G,一面数据,另一面是印刷面。 D9 &#…

4 下位机的连线与调试

4.1 连线 (1)连线依据 使用开源项目ros_arduino_bridge。从名字上来看,ros_arduino_bridge是建立了ROS(机器人操作系统)和Arduino之间的桥梁。也就是建立了机器人上位机与下位机之间的通讯。它是一个ROS功能包集&…

Delphi D10.X 并行库PPL编程之 TParallel.For

Delphi D10.X 并行库PPL编程系列之 TParallel.For delphi中的RTL(运行库)提供了并行编程库(PPL --Parallel Programming Library) ,让您的应用程序可以在跨平台应用中有效的使用多个CPU并行运行任务的能力。 使用TPar…

Delphi D10.X安卓开发中按两次返回键退出系统的方法

在安卓APP应用中,通常按下返回键后会关闭程序,有时候我们为了避免误按返回健导致程序的退出,会对按下返回健进行检测,并要求连续按下两次才退出程序。 在Delphi中开发安卓时,如何检测并实现两次退出APP呢。你可以使用发…

Delphi D10.X中实现安卓中文语音合成(中文朗读)就这么简单

前言 语音合成,据说Android系统从1.6版本开始就支持TTS(Text-To-Speech)。但是android系统默认的TTS引擎:Pic TTS不支持中文。好在现在国内较多的手机都已安装好中文的TTS引擎。使用Delphi开发一个可以朗读中文的APP就非常的简单。 本文给大…