【基础知识】 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