例如:ADD R0 [6] (默认第一个操作数即是原操作数,又是目的操作数)
将通用寄存器R0中的数据,与存储器地址为6的数据相加,返回给寄存器R0
假设计算机已有初始值,R0中的值为00000011,PC中的值为0001,存储器地址0001中的指令用10101010指代,
具体过程详解:
1.取指:控制器将指令地址送往存储器,存储器按给定的地址读出数据,送回控制器
(1)控制器发出控制信号,将PC寄存器中的内容通过CPU内部总线传送到MAR中(MAR中也保存了0001)
(2)MAR将地址送到地址总线,与此同时,控制电路在控制总线上发出控制信号,代表此次操作为read,这样存储器上MAR寄存器就会收到地址总线上传送来的地址,并把它保存下来
存储器中的控制逻辑也会收到控制总线上的信号,表示此次操作为read,这样存储器通过地址译码器,就可以查找到对应地址0001的存储单元上的内容,并将其中的数据传送到MDR寄存器中
(3)存储器的控制逻辑通过控制总线向CPU反馈当前传输状态READY,同时MDR中的内容传送到数据总线上,随后CPU中控制电路检测到控制总线上的Ready信号,就知道当前数据总线上已经准备好了数据,
因此,CPU中MDR就会将数据总线传送的数据保存下来,然后将MDR中的数据必须要传送到IR寄存器中
(4)PC寄存器中的数据更新到下一条指令所需访问的地址0010(取值阶段完成)
2.译码:控制器分析指令的操作性质,控制器向有关部件发出指令所需的控制信号
(1)当前IR寄存器中的数据送到指令译码部件,指令译码部件根据指令编码解析10101010(ADD R0 [6]),控制电路据此产生对应的控制信号,发送到相关部件中
3.执行:控制器从通用寄存器或存储器取出操作数,控制器命令运算器对操作数进行指令规定的运算。
(1)MAR中会产生0110(即6)随后的过程类似于取值阶段,因为最后传送到CPUMDR中的数据要进行加法运算,所以随后还会将其传送到ALU的Y寄存器中
(2)另一个操作数存储在R0中,因此所以会将R0中的数据传送到ALU的另一个输入端,即X寄存器上
(3)在控制电路的作用下,ALU进行运算,将XY中的内容执行加法,计算出结果00000101
4.回写:将运算结果写入通用寄存器或存储器中
(1)当前运算结果还在ALU的输出端即Z寄存器中,控制电路给出相应的控制Z寄存器中的数据传送到R0中,R0原本的数据被新的结果覆盖
(2)CPU中PC寄存器进行下一条指令