版权声明:原创文章,转载请声名。 https://blog.csdn.net/qq_40707451/article/details/85063271
Coding这么久,还记得第一次在敲下“hello word”的情景吗?你会惊叹于计算机的神奇,也会因为它的神奇而产生巨大的好奇心,从而走上这条“不归路”。或许你知道用代码来表达你的思想,但可能并不清楚你写下的每一行代码是怎样被电脑编译的。
你可能会说不就是像下面这样吗?
- 准备编译的代码
- 编译后转换成机器语言的EXE文件
- 程序运行时,在内存中生成EXE文件副本
- CPU解释并处理程序内容
我们再看看CPU的组成
- CPU的内部由寄存器、控制器、运算器和时钟四个部分构成,各部分之间由电流信号相互连通。寄存器可用来暂存指令、数据等处理对象,可以将其看作是内存的一种。根据种类的不同,一个CPU内部会有20~100个寄存器。控制器负责把内存上的指令、数据等读入寄存器,并根据指令的执行结果来控制整个计算机。运算器负责运算从内存读入寄存器的数据。时钟负责发出CPU开始计时的时钟信号。不过,也有些计算机的时钟位于CPU的外部。
- 通常所说的内存指的是计算机的主存储器(main memory),简称主存。主存通过控制芯片等与CPU相连,主要负责存储指令和数据。主存由可读写的元素构成,每个字节(1字节 = 8位 )都带有一个地址编号。CPU可以通过该地址读取主存中的指令和数据,当然也可以写入数据。但有一点需要注意,主存中存储的指令和数据会随着计算机的关机而自动清除。
- 程序启动后,根据时钟信号,控制器会从内存中读取指令和数据。通过对这些指令加以解释和运行,运算器就会对数据进行运算,控制器根据该运算结果来控制计算机。看到“控制”一词时,大家可能会将事情想象得过于复杂,其实所谓的控制就是指数据运算以外的处理(主要是数据输入输出的时机控制)。比如内存和磁盘等媒介的输入输出、键盘和鼠标的输入、显示器和打印机的输出等,这些都是控制的内容。
也可以这样说,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:无论做什么,要知其然,也要知其所以然