计算机内部执行add指令的过程

执行指令的示例:

  1. 指令格式:ADD R0,[6]
  2. 指令功能:通用寄存器R0的内容+地址为6的存储单元的内容=运算结果(更新到通用寄存器R0)

第一步:取指(fetch)

  1. 控制器将指令的地址送往存储器
  2. 存储器将给定的地址读出指令内容,送回控制器
    在这里插入图片描述

控制器会发出控制信号将PC(program counter)寄存器中的内容通过内部总线传送到MAR(Memory Address Register)中,MAR将会把地址送到地址总线上,与此同时控制电路会在控制总线上发送相应的控制信号(代表这一次访问存储器的操作是要读数据),这样存储器的MAR寄存器就会收到地址总线上传送来的地址并把它保存下来,存储器中的控制逻辑也会收到控制总线中传送来的控制信号(得知这一次访问操作是读操作),将存储器通过地址译码器就可以查找到对应地址0001存储的内容,并将该存储单元的内容送到MDR(Memory Data Register)寄存器中,然后存储器的控制逻辑会通过控制总线向CPU反馈当前的传输已经准备好了,同时MDR中的内容也会送到数据总线上,随后CPU中的控制电路检测到来自控制总线上准备好的Ready信号,就知道当前数据总线上已经准备好了数据,因此MDR寄存器就会把数据总线上当前传送来的数值保存下来,这就获得了我们所要取的指令,当然仅到如此是不够的,MDR中的内容还必须要传送到指令寄存器(IR)中,当指令的编码已经保存到IR寄存器中时,最后把PC寄存器更新到下一条需要访问的地址,取指阶段到此正式完成

第二步:译码(decode)

  1. 控制器分析指令的操作性质
  2. 控制器向有关部件发出指令所需的控制信号
    在这里插入图片描述

当前的指令寄存器IR中指令编码会送到指令译码部件,指令译码部件根据指令编码很快会发现这是一条加法指令,而且需要把R0和存储器中地址为6的单元的内容相加并把结果存放到R0中,由控制电路据此产生相应的电路信号发送到相关部件中,译码阶段到此完成

第三步:执行(execute)

  1. 控制器从通用寄存器或存储器取出操作数
  2. 控制器命令运算器对操作数进行指令规定的运算
    在这里插入图片描述

首先根据这条指令我们会发现还需要去取操作数,取到一个操作数在存储器中,因此这一步会在MAR中放置要访问的存储器的地址0110(随后过程类似于取指阶段的操作),MAR将地址发送到地址总线,同时控制电路会在控制总线上发送读操作的控制信号,存储器的MAR和控制逻辑会接受到相应的信号,然后查找到对应的地址(0110),对应的内容会送到MDR寄存器,然后控制逻辑会向CPU反馈当前数据已经准备好的信号,然后MDR的内容也就会放置到数据总线上,CPU会接受数据并保存在MDR寄存器中,因为这个数据要进行加法运算,所以控制器会进一步将MDR中的数据传送到ALU(算术逻辑单元)的输入端(目前会暂存到Y寄存器中),这一个操作数现在就准备好了,另一个操作数是放在R0中,因此控制器还会将R0中的数据传送到ALU的另一个输入端(X寄存器),现在两个操作数都准备好了,在控制电路的控制下ALU就会进行运算,将X和Y中的内容执行加法,计算出结果就是00000101,执行阶段到此完成

第四步:回写(write -back)

  1. 将运算结果写入通用寄存器或存储器
    在这里插入图片描述

现在运算结果还在ALU的输出端(Z寄存器)中,控制电路会给出相应的控制信号,将Z寄存器中的内容存放到R0中,R0目前的内容是之前的原操作数(00000011),随后会被新的结果所覆盖,这样我们这个加法运算的结果就已经保存在了R0寄存器中,回写阶段到此完成

然后CPU就会自动执行下一条指令

  • 9
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值