cpu处理过程详解(cpu执行的基本操作命令)

处理器执行一条命令的步骤,组织成一个统一的流程。我们可以用少量的硬件单元和一个时间单位来控制执行的顺序,这样来实现整个处理器。
在时钟周期开始时到结束时,都会经历了哪些流程。
步骤 描述
取指 从内存中读取指令字节,地址为程序计数器(PC)的值,并解析指令字段和常数字。同时计算下一条指令的地址。
译码 解析指令中的寄存器字段,读取寄存器文件中的值,得到操作数。
执行 根据指令的类型执行相应的操作,计算运算结果或更新目标寄存器。同时产生与条件码相关的信号。
访存 读写程序数据,计算内存地址,并读取或写入数据内存。
写回 将执行阶段计算出的值写入寄存器文件。
更新PC 根据指令的类型和条件,计算新的程序计数器的值。

取指
首先,处理器在取指阶段要从内存中读取一条指令,就像我们从书本中读取一句话一样。它会根据程序计数器(PC)的值,找到对应的内存地址,并读取出10个字节的内容,就像我们根据页码找到对应的页来读取内容一样。
接着,处理器会根据这些读取的字节,生成各个指令字段,就像我们从一句话中把关键词找出来一样。其中,第0个字节被标记为指令字节,里面又包含两个4位的数,分别叫做icode和ifun,它们是控制逻辑块用来计算指令和功能码的。
而第1到第9个字节是关于寄存器和常数字的编码,处理器会把它们放到相应的寄存器字段和常数字中。同时,处理器会根据第一个字节的规则,计算出当前指令的下一条指令的地址valP,其实就是PC的值加上已经取出指令的长度。
整个取指阶段的工作就像是处理器从内存中读取了一条指令,并对这条指令进行了解析和处理,就像我们从书本中读取了一句话,并找出了关键信息一样。
译码
在译码阶段,处理器要根据之前取出的指令内容,去找到相应的寄存器,并读取其中的数据。就像我们在一本词典中查找一个单词一样。
处理器有四个端口,其中两个是读端口,分别叫做 srcA 和 srcB。这两个端口需要输入一个寄存器ID(就像我们需要输入一个词典中的索引号一样),然后根据这个ID,处理器就能找到相应的寄存器,并读取其中的数据。
每个寄存器端口上有一个地址连接和一个数据连接,地址连接用来指定要读取的寄存器的编号,而数据连接是一组64根线路,用来传输寄存器中的数据。如果某个端口上的值是特殊标识符,那么就不需要去访问寄存器,就像我们在查找词典时,如果没有这个单词,就不需要去看单词的释义一样。
在译码阶段,处理器最多会读入两个操作数,得到的值叫做 valA 和 valB。通常情况下,处理器会读取 rA 和 rB 字段中指定的寄存器中的数据。但是也有一些特殊的指令,它们会读取寄存器以外的内容。
整个译码阶段的工作就像是处理器在查找寄存器,并从中读取出对应的数据,就像我们在词典中查找单词,并找到了单词的释义一样。
执行
在执行阶段,处理器会根据指令的种类,用不同的方法来进行运算或者处理。
对于整数运算的指令,处理器会执行指令中规定的运算操作,就像我们做数学题一样进行计算。
而对于其他类型的指令,处理器会把自己当作一个加法器,用来计算栈指针的增加或减少,或者计算出一个有效的内存地址,我们把计算得到的值称为 valE。
对于传送数据的指令来说,执行阶段会检查条件码和传送条件,如果条件满足,就会更新目标寄存器中的值;
对于跳转指令来说,执行阶段会根据条件码和跳转类型来计算是否需要跳转到其他的位置。
整个执行阶段的工作就像是处理器在根据指令的不同要求,进行不同的运算和判断,就像我们在解数学题时,根据题目的要求,进行不同的计算和判断一样。
访存
在访存阶段,处理器的主要任务是读取或写入程序中的数据,这个阶段被分为四个控制块。
两个控制块负责生成需要读取或写入的内存地址和内存输入数据的值,另外两个控制块则负责决定执行读取操作还是写入操作的信号。
当执行读取操作时,数据内存会产生一个值,我们称之为 valM。这个阶段的目标是从内存中取出需要的数据,或者将处理器计算得到的数据写入到内存中。整个过程就像我们去书包里拿出需要的东西,或者把一些东西放进书包一样。
写回
在写回阶段,处理器需要将一些计算得到的结果写回到寄存器文件中。
寄存器文件有四个端口,其中两个是读端口,用于读取寄存器中的值,另外两个是写端口,标记为 E 和 M。
端口 E 用来写入执行阶段计算得到的值,也就是一些算术或逻辑运算的结果。
端口 M 用来写入从数据内存中读取出来的值,也就是在访存阶段得到的值。
在写回阶段,最多可以将两个结果写入到寄存器文件中,这样处理器可以将计算的结果保存在寄存器中,供后续的指令使用。类似于我们完成一道数学题后,将得到的答案写在本子上,方便以后查看和使用。
更新 PC
更新 PC(程序计数器)的阶段是整个流程的最后一步。
在这个阶段,根据当前指令的类型和是否需要进行分支,会计算出新的程序计数器的值。
新的程序计数器的值可能来自于三个来源:
  • valP:它代表下一条指令的地址,即当前指令执行完毕后,将会执行的下一条指令的地址。

  • valC:它是由调用指令或跳转指令指定的目标地址,用于处理函数调用或者跳转到指定的代码位置。
  • valM:它是从内存中读取的返回地址,用于函数返回时回到函数调用的地方。
根据当前指令的要求,我们会选择合适的地址来源,计算出新的程序计数器的值,从而实现了指令的顺序执行和分支跳转。
异常状态
当发生异常时,处理器就会停止正常的流程。异常可能是因为执行了非法指令,或者试图读写非法的内存地址。
在设计中,处理器会进入异常处理模式,根据异常类型执行相应的异常代码,以处理异常情况。这样的设计保证了处理器在出现错误时能够及时停止执行,以避免进一步的问题。

原创文章,作者:小道研究,如若转载,请注明出处:https://www.sudun.com/ask/34492.html

(0)
小道研究's avatar小道研究
上一篇 2024年4月10日 下午7:52
下一篇 2024年4月10日 下午7:54

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注