【基础知识】 CPU 详细整理


提要

64位/32位操作系统,64/32指的是通用寄存器的位数。

CPU的内部结构解析

CPU和内存是由许多晶体管组成的电子部件,通常称为IC(Integrated Circuit,集成电路)。从功能方面来看,CPU的内部由寄存器,控制器,运算器和时钟四部分构成,各部分之间由电流信号相互连通。

寄存器:可用来暂存指令,数据等处理对象,可以将其看做是内存的一种。根据种类的不同,一个CPU内部会有20~100个寄存器。

控制器:负责把内存上的指令,数据等读入寄存器,并根据指令的执行结果来控制整个计算机。

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

时钟:负责发出CPU开始计时的时钟信号。不过,也有些计算机的时钟位于CPU的外部。

MMU:

CPU 的主频:CPU 的主频是由一个晶体振荡器来实现的

CPU的运作原理:取指令》译码》获取操作数》执行指令(ALU)》存储(寄存器)

取指令

CPU是寄存器的集合体

程序是把寄存器作为对象来描述的 例如C#IL操作码,就是寄存器。

使用高级语言编写的程序会在编译后转化成机器语言,然后通过CPU内部的寄存器来处理。不同类型的CPU,其内部寄存器的数量,种类以及寄存器存储的数值范围都是不同的。根据功能的不同,我们可以将寄存器大致划分为八类。

累加寄存器:存储执行运算的数据和运算后的数据。

标志寄存器:存储运算处理后的CPU的状态。

pc程序计数器:指令指针 存储下一条指令所在内存的地址。

指令计数器是用于存放下一条指令所在单元的地址的地方。 为了保证程序(在操作系统中理解为进程)能够连续地执行下去,CPU必须具有某些手段来确定下一条指令的地址。而程序计数器正是起到这种作用,所以通常又称为指令计数器。在程序开始执行前,必须将它的起始地址,即程序的一条指令所在的内存单元地址送入PC,因此程序计数器(PC)的内容即是从内存提取的第一条指令的地址。当执行指令时,CPU将自动修改PC的内容,即每执行一条指令PC增加一个量,这个量等于指令所含的字节数,以便使其保持的总是将要执行的下一条指令的地址。由于大多数指令都是按顺序来执行的,所以修改的过程通常只是简单的对PC加1。PC的维数一般和存储器地址寄存器MAR的维数一样。

当程序转移时,转移指令执行的最终结果就是要改变PC的值,此PC值就是转去的地址,以此实现转移。有些机器中也称PC为指令指针IP(Instruction Pointer)

基址寄存器:存储数据内存的起始地址。

变址寄存器:存储基址寄存器的相对地址。

通用寄存器:存储任意数据。

指令寄存器:存储指令。CPU内部使用,程序员无法通过程序对该寄存器进行读写操作。

栈寄存器:存储栈区域的起始地址。

取指令:程序计数器是用于存放下一条指令所在单元的地址的地方。当执行一条指令时,首先需要根据PC中存放的指令地址,将指令由内存取到指令寄存器中,此过程称为“取指令”

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

汇编语言的的指令是和寄存器和运算器 存储器一 一对应的。如,加法指令00000011写成汇编语言就是 ADD。只要还原成二进制,汇编语言就可以被 CPU 直接执行,所以它是最底层的低级语言。

C# IL代码指令不是一 一对应的。IL的指令是组合出来的。是对机器指令的抽象。

内容来源:https://my.oschina.net/u/4274516/blog/3522193

https://my.oschina.net/u/4398626/blog/3929100

https://my.oschina.net/u/4370598/blog/3757485

https://my.oschina.net/u/4391341/blog/3612316