如何在数据路径中获取注册地址(例如:($s2))?

How can i get register adress (ex: ($s2)) in datapath?

我了解数据路径的每一部分,但我无法清楚地了解如何获取寄存器的内存地址。例如,在一个假设的新指令中,如 J 200($s1)

(mips 语言)

我们必须从 $s1 的内容开始 -- 那里保存的值。根据该寄存器保存的 32 位值,我们可以:

  1. $s1 + 200(简单加法),或者,
  2. 内存[$s1 + 200] (displacement addressing),或
  3. Mem[$s1] + 200(对此有一些名称,但它不是常见的寻址模式)。

在你的例子中,因为你想做 PC = 200($s1),我的猜测是 (1) 或 (2)。

因为分配给 PC (PC=...) 已经意味着另一个内存提取 将在下一条指令中发生 — 获取要执行的机器码指令 —我们需要质疑是否需要内存获取(在新的 J 指令中)。这里的语法 J 200($s1) 是不明确的(b/c 执行周期的隐含间接寻址:指令执行期间自然发生的 IR=Mem[PC]),因此,您必须询问 200 是否($s1) 是接下来(很可能)要获取和执行的机器代码的简单地址,或者,告诉机器代码在哪里的数据指针的地址。

前者 (1) 是合理的,因为处理器执行的下一个操作是 IR = Mem[PC],因此跨两条指令(这条 J 和下一条指令),表示执行Mem[PC] 处的指令(其中 PC=$s1+200)等同于执行 Mem[$s1+200] 处的指令:单层间接寻址,表示使用位置 $s1+200 , 赋值给 PC=$s1+200, 随后用作 program/machine 代码指令的位置。

IR 是指令寄存器,在内部用于描述处理器获取机器代码指令并保存它以进行解码和进一步执行。

后者 (2) 也是合理的,它表示在 Mem[Mem[$s1+200]] 处执行指令,这是一个额外的间接级别,如果打算使用内存则适用位置,$s1+200,作为数据字,作为指向下一个 PC/machine 代码指令的指针,分配给 PC,以便下一条指令来自该数据指针值。