概述
执行指令的示例:
- 指令格式:ADD R0,[6]
- 指令功能:通用寄存器R0的内容+地址为6的存储单元的内容=运算结果(更新到通用寄存器R0)
第一步:取指(fetch)
- 控制器将指令的地址送往存储器
- 存储器将给定的地址读出指令内容,送回控制器
控制器会发出控制信号将PC(program counter)寄存器中的内容通过内部总线传送到MAR(Memory Address Register)中,MAR将会把地址送到地址总线上,与此同时控制电路会在控制总线上发送相应的控制信号(代表这一次访问存储器的操作是要读数据),这样存储器的MAR寄存器就会收到地址总线上传送来的地址并把它保存下来,存储器中的控制逻辑也会收到控制总线中传送来的控制信号(得知这一次访问操作是读操作),将存储器通过地址译码器就可以查找到对应地址0001存储的内容,并将该存储单元的内容送到MDR(Memory Data Register)寄存器中,然后存储器的控制逻辑会通过控制总线向CPU反馈当前的传输已经准备好了,同时MDR中的内容也会送到数据总线上,随后CPU中的控制电路检测到来自控制总线上准备好的Ready信号,就知道当前数据总线上已经准备好了数据,因此MDR寄存器就会把数据总线上当前传送来的数值保存下来,这就获得了我们所要取的指令,当然仅到如此是不够的,MDR中的内容还必须要传送到指令寄存器(IR)中,当指令的编码已经保存到IR寄存器中时,最后把PC寄存器更新到下一条需要访问的地址,取指阶段到此正式完成
第二步:译码(decode)
- 控制器分析指令的操作性质
- 控制器向有关部件发出指令所需的控制信号
当前的指令寄存器IR中指令编码会送到指令译码部件,指令译码部件根据指令编码很快会发现这是一条加法指令,而且需要把R0和存储器中地址为6的单元的内容相加并把结果存放到R0中,由控制电路据此产生相应的电路信号发送到相关部件中,译码阶段到此完成
第三步:执行(execute)
- 控制器从通用寄存器或存储器取出操作数
- 控制器命令运算器对操作数进行指令规定的运算
首先根据这条指令我们会发现还需要去取操作数,取到一个操作数在存储器中,因此这一步会在MAR中放置要访问的存储器的地址0110(随后过程类似于取指阶段的操作),MAR将地址发送到地址总线,同时控制电路会在控制总线上发送读操作的控制信号,存储器的MAR和控制逻辑会接受到相应的信号,然后查找到对应的地址(0110),对应的内容会送到MDR寄存器,然后控制逻辑会向CPU反馈当前数据已经准备好的信号,然后MDR的内容也就会放置到数据总线上,CPU会接受数据并保存在MDR寄存器中,因为这个数据要进行加法运算,所以控制器会进一步将MDR中的数据传送到ALU(算术逻辑单元)的输入端(目前会暂存到Y寄存器中),这一个操作数现在就准备好了,另一个操作数是放在R0中,因此控制器还会将R0中的数据传送到ALU的另一个输入端(X寄存器),现在两个操作数都准备好了,在控制电路的控制下ALU就会进行运算,将X和Y中的内容执行加法,计算出结果就是00000101,执行阶段到此完成
第四步:回写(write -back)
- 将运算结果写入通用寄存器或存储器
现在运算结果还在ALU的输出端(Z寄存器)中,控制电路会给出相应的控制信号,将Z寄存器中的内容存放到R0中,R0目前的内容是之前的原操作数(00000011),随后会被新的结果所覆盖,这样我们这个加法运算的结果就已经保存在了R0寄存器中,回写阶段到此完成
然后CPU就会自动执行下一条指令
最后
以上就是美丽纸鹤为你收集整理的计算机内部执行add指令的过程的全部内容,希望文章能够帮你解决计算机内部执行add指令的过程所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复