控制硬件在完成指令解码之前如何知道要读取哪些寄存器?

Posted

技术标签:

【中文标题】控制硬件在完成指令解码之前如何知道要读取哪些寄存器?【英文标题】:How can the control hardware know which registers to read before it completes decoding the instruction? 【发布时间】:2017-01-09 18:24:47 【问题描述】:

在通过 Hamacher 进行计算机组织时。 ,我开始了解说明的基本步骤和操作。

以下是汇编代码

添加 RC、RA、RB

指令如下-:

1.Fetch the Instruction and increament the PC.
2.Decode the instruction and read Registers RA and RB
3.Compute [RA]+[RB](Executing Instruction)
4.Load the result into destination register RC

给出的解释为-: 这是可能的,因为源寄存器地址在所有指令中使用相同的位位置指定

我不明白。如果有人请分享他们的知识,将会很有帮助。!!

【问题讨论】:

它在哪里说它在解码之前读取寄存器?当然可以有固定长度的编码方案,其中操作码占据特定区域,源和目标寄存器占据特定区域。在这些方案中,您无需等到整个指令被解码,只要源寄存器被解码,您就可以获取它。但是您仍然必须等到您感兴趣的位区域(在本例中为源寄存器)被解码。 【参考方案1】:

在机器级别上,每条指令只是一个或几个字节编码 PC 需要执行的操作。此数据的某些位确定要运行的操作(加、减、移位、读取等),其他位确定要使用的操作数。来自简单指令集的简单示例for MIPS32 architecture:

Instr:       add $d,$s,$t
Bit pattern: 000000ss sssttttt ddddd--- --100000
Instr:       sub $d,$s,$t
Bit pattern: 000000ss sssttttt ddddd--- --100010
Instr:       and $d,$s,$t
Bit pattern: 000000ss sssttttt ddddd--- --100100

如您所见,无论操作类型如何,编码操作数的位总是在同一位置,因此 CPU 可以在完成解码操作类型之前开始准备操作数数据。不知道 MIPS 是否也使用这种方法,但它有助于说明它。

【讨论】:

以上是关于控制硬件在完成指令解码之前如何知道要读取哪些寄存器?的主要内容,如果未能解决你的问题,请参考以下文章

arm体系结构

操作系统的硬件环境

如何知道在LDRH指令中哪些半字位(8位)要移位到Rd(目标寄存器)?

CPU的功能部件都有哪些?

Day01_计算机硬件及启动流程

Friday for Oldboy