微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

(mips 语言)

My Datapath:

解决方法

我们必须从 $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 和下一条指令),即执行指令at Mem[PC] (where PC=$s1+200) 所以相当于说在 Mem[$s1+200] 处执行指令:单级间接,它说使用位置 $s1+200,分配给PC=$s1+200,随后用作程序/机器代码指令的位置。

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。