CPU到底是什么?

版权声明:原创文章,转载请声名。 https://blog.csdn.net/qq_40707451/article/details/85063271

Coding这么久,还记得第一次在敲下“hello word”的情景吗?你会惊叹于计算机的神奇,也会因为它的神奇而产生巨大的好奇心,从而走上这条“不归路”。或许你知道用代码来表达你的思想,但可能并不清楚你写下的每一行代码是怎样被电脑编译的。

你可能会说不就是像下面这样吗?

  1. 准备编译的代码
  2. 编译后转换成机器语言的EXE文件
  3. 程序运行时,在内存中生成EXE文件副本
  4. CPU解释并处理程序内容

我们再看看CPU的组成

  1. CPU的内部由寄存器、控制器、运算器和时钟四个部分构成,各部分之间由电流信号相互连通。寄存器可用来暂存指令、数据等处理对象,可以将其看作是内存的一种。根据种类的不同,一个CPU内部会有20~100个寄存器。控制器负责把内存上的指令、数据等读入寄存器,并根据指令的执行结果来控制整个计算机。运算器负责运算从内存读入寄存器的数据。时钟负责发出CPU开始计时的时钟信号。不过,也有些计算机的时钟位于CPU的外部。
  2. 通常所说的内存指的是计算机的主存储器(main memory),简称主存。主存通过控制芯片等与CPU相连,主要负责存储指令和数据。主存由可读写的元素构成,每个字节(1字节 = 8位 )都带有一个地址编号。CPU可以通过该地址读取主存中的指令和数据,当然也可以写入数据。但有一点需要注意,主存中存储的指令和数据会随着计算机的关机而自动清除。
  3. 程序启动后,根据时钟信号,控制器会从内存中读取指令和数据。通过对这些指令加以解释和运行,运算器就会对数据进行运算,控制器根据该运算结果来控制计算机。看到“控制”一词时,大家可能会将事情想象得过于复杂,其实所谓的控制就是指数据运算以外的处理(主要是数据输入输出的时机控制)。比如内存和磁盘等媒介的输入输出、键盘和鼠标的输入、显示器和打印机的输出等,这些都是控制的内容。

也可以这样说,CPU是寄存器的集合体。

CPU的四个构成部分中,程序员只需要了解寄存器即可,其余三个都不用太过关注。那么,为什么必须要了解寄存器呢?因为程序是把寄存器作为对象来描述的。

不同类型的CPU,其内部寄存器的数量、种类以及寄存器存储的数值范围都是不同的。不过,根据功能的不同,可以将寄存器大致划分为八类。

                                         种类                                                        功能
累加寄存器(accumulator register) 存储执行运算的数据和运算后的数据
标志寄存器(flag register) 存储运算处理后的CPU的状态
程序计数器(program counter) 存储下一条指令所在内存的地址
基址寄存器(base register) 存储数据内存的起始地址

变址寄存器(index register)

存储基址寄存器的相对地址
通用寄存器(general purpose register) 存储任意数据
指令寄存器(instruction register) 存储指令。CPU内部使用,程序员无法通过程序对该寄存器进行读写操作
栈寄存器(stack register) 存储栈区域的起始地址

从表中可以看出,寄存器中存储的内容既可以是指令也可以是数据。其中,数据分为“用于运算的数值”和“表示内存地址的数值”两种。数据种类不同,存储该数值的寄存器也不同。CPU中每个寄存器的功能都是不同的。用于运算的数值放在累加寄存器中存储,表示内存地址的数值则放在基址寄存器和变址寄存器中存储。

对程序员来说,CPU就是具有各种功能的寄存器的集合体。其中,程序计数器、累加寄存器、标志寄存器、指令寄存器和栈寄存器都只有一个,其他的寄存器一般有多个。

程序计数器、标志寄存器、累加寄存器、基址寄存器、变址寄存器、通用寄存器

基址寄存器、变址寄存器、通用寄存器都不止一个
程序员眼中的CPU(CPU是寄存器的集合体)  

PS:无论做什么,要知其然,也要知其所以然

猜你喜欢

转载自blog.csdn.net/qq_40707451/article/details/85063271