• 计算机的指令运行过程


    例如: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寄存器进行下一条指令

  • 相关阅读:
    通过jQuery修改ui的顺序
    iOS用模型取代字典的好处
    iOS开发NSBundle、UIImageView和UIButton总结
    php数组中关于某个元素进行排序
    VMware 11安装Mac OS X 10.10
    js中的in_array
    localStorage中js数组的存储和读取
    google地图通过js计算当前位置与其余多个点之间的最近距离
    通过js修改图片的css样式,实现简单的图片旋转
    Javac不是内部或外部指令
  • 原文地址:https://www.cnblogs.com/mylearning-log/p/11244613.html
Copyright © 2020-2023  润新知