1.示例
指令格式:ADD R0,[6]
指令功能:
ADD这是一条加法指令
通用寄存器R0的内容+地址为6存储单元的内容=运算结果(更新到R0)
2.过程
R0里面数为00000011十进制为3
地址为0110(6)存储单元内容为00000010十进制为2
也就是计算3+2=5并且把运算结果返回到R0
2.1取指
①控制器将指令的地址送往存储器。
②存储器按给定地址独处指令内容,送回控制器。
上图具体步骤
1.控制器发出控制信号将PC寄存器里面的地址通过内部总线传送到MAR寄存器里
2.MAR寄存器将地址送到地址总线上,与此同时控制电路会在控制总线上发出控制信号,并表示这次访问
存储器是读取数据。
3.存储器的MAR寄存器收到地址总线上的地址,并将其保存下来,存储器里面的控制逻辑也会收到
控制总线过来的控制信号,得知这次操作是读操作。
4.存储器通过地址译码器对应地址0001存储单元内容,并将该存储单元内容送到MDR寄存器中。
存储器的控制逻辑会通过控制总线向cpu反馈当前的传输已经主备好了。
5.同时MDR里面内容也送到数据总线上,随后,cpu控制电路检测到来自控制总线准备好Ready信号,得知
数据总线上准备好了数据。
6.因此cpu中的MDR寄存器将当前数据总线上传送来的数值保存下来,这就获得了我们要取的指令。
7.cpu中MDR寄存器的内容要传送到IR指令寄存器中,当指令进入IR中,取指这部分算是完成了吗?
8.PC寄存器更新为下一条指令的地址。0001变为0010,取指阶段到此完成
2.2译码
①控制器分析指令的操作性质
②控制器向有关部件发出指令所需控制信号
上图具体步骤
1.当前IR指令寄存器中的指令编码送到指令译码部件。
2.指令译码部件根据指令编码很快会发现这是一条加法指令,而且是吧R0
和存储器地址为6的单元内容相加,把结果存入R0中。控制电路据此产生控制信号发到相关部件中
译码阶段到此完成。
译码得到的指令:ADD R0,[6]
2.3执行
①控制器从通用寄存器或存储器取出操作数
②控制器命令运算器对操作数进行指令规定的运算
上图具体步骤
1.根据这条指令需要去取操作数,其中一个操作数在存储器中地址为6的单元,因此在MAR寄存器中放入要取的操作数地址0110(十进制的6)。
2.MAR寄存器将地址发送到地址总线,同时控制电路发送读取的信号到控制总线,存储器的控制逻辑和MRA寄存器会接收到相应的信号,然后
查找到对应地址0110里面的内容00000010,送到MDR寄存器,存储器控制逻辑向cpu反馈当前数据已经准备好的信号,MDR内容会被放到
地址总线上,cpu接收数据并放在MDR寄存器中。
3.cpu里面MDR寄存器数据要参与加法运算,cpu控制器会将MDR寄存器数据通过内部总线传送到ALU的输入Y寄存器中,这一个操作数已经准备好了。另一个操作数存放在R0寄存器中,因此控制器会将R0里面数据通过内部总线传送到ALU另一个输入端X寄存器。
4.现在两个操作数R0和6已经准备好了,在控制电路的控制下ALU就会进行运算将X和Y寄存器里面的内容进行加法运算。结果是00000101(十进制5)
到此执行阶段就结束了。
2.4回写
①将运算结果写入通用寄存器或存储器
1.现在运算结果还在ALU的输出端Z寄存器,控制电路会给出相应控制信号,将z寄存器内容传送到
R0寄存器中,R0里面原来的数据会被新的结果覆盖。这个加法运算的结果就保存到R0寄存器中
回写阶段到此完成。
3.CPU就会执行下一条指令