一、控制器的基本组成
CU(Control Unit):控制单元(核心部分),分析指令,给其他部件发出控制信号,里面也集成了一些复杂的电路;
IR(Instruction Register):指令寄存器,存放当前执行的指令;
PC(Program Counter):程序计数器(寄存器),存放下一条指令地址,有自动加1功能。
ID:指令译码器
CLOCK:时序系统
微操作信号发生器
计算机主要的工作是执行代码,而代码其实就是一条一条的指令, 每完成一条指令就要分为上面的阶段,第一个阶段是取指令,会根据PC也就是程序计数器里面所记录的指令地址,根据这个地址从内存中取出指令,取出的指令会被放在IR也就是指令寄存器中,然后CU就可以分析这条指令到底是要干什么的,当它分析完了之后CU就会控制其他部件配合着完成指令的具体执行,有时候也会把前面两部分操作统称为取指令。
二、控制器的工作过程
int a=2,b=3,c=1,y=0;
void main()
{ y=a*b+c;
}
这是一段程序的高级语言,CPU不可能一次性完成这样一个复合运算,它只能先进行乘法然后进行加法,所以这段程序在经过编译一系列的操作之后可以把高级语言翻译成机器能够看得懂的机器语言,同时会把这段程序装入主存,它在主存的样子就是下面这样的。
最左边的主存地址的0就是指明了指令在主存中的地址,0号存储单元、1号存储单元...以此类推一直到8号,定义了a、b、c、y四个变量,a这个变量是存储在地址为5的存储单元中的,当然变量在内存中以二进制的形式存放,其他变量也以此类推,y存储在8这个存储单元当中。
除了这些数据之外前面0~4这几个存储单元中存储的是这段程序所对应的机器指令,高级语言写的短短几行代码经过编译之后丢给计算机的其实是那么多条复杂的指令。指令分为操作码和地址码两个部分,这两个部分加起来是16个bit,在执行这些指令的时候CPU会把它拆分成操作码和地址码两个部分,下面变量的数据地址的存储单元也是16个bit,也就是存储字长为16bit。
上面的指令和变量的数据都是存储在存储体当中的,这个程序要执行的第一条指令应该是存放在上面的0号第一条的指令,所以在程序运行之前PC会指向0这个位置,接下来我们应该把这个位置存放的这条指令给取出来执行,首先PC存放的内容需要通过地址总线传送到MAR这个地址寄存器中,此时PC是0,导致MAR=0。注:(把寄存器打一个()指寄存器里面的内容)。
初:(PC)=0,程序计数器里面的内容指向第一条指令的存储地址
#1:(PC)
MAR,导致(MAR)=0
#3:M(MAR)
MDR,导致(MDR)=000001 0000000101 (前面的M指的是主存储器Memory)
#4:(MDR)
IR,导致(IR)=000001 0000000101
#5:OP(IR)
CU,指令的操作码送到CU,CU分析后得知,这是“取数”指令
#6:Ad(IR)
MAR,指令的地址码送到MAR,导致