【问题标题】:Value of Rd (Destination Register) in load/store instruction (mips pipeline)加载/存储指令(mips 流水线)中 Rd(目标寄存器)的值
【发布时间】:2017-07-06 16:06:42
【问题描述】:

Architecture of Pipeline MIPS Processor

我正在使用流水线 MIPS 处理器,并且我有以下程序:

# $a0 = 0x 805F E371
# $t0 = 0x 8007 4821

lw $t0, ($a0)

加载指令在 ID 阶段运行。在 ID/EX 寄存器中有很多保存的寄存器。此寄存器之一称为寄存器目标 (Rd)。我知道Rs寄存器包含$a0的值,Rt包含$t0的值。

问题是:Rd 里面有什么?我想0 因为它没有被使用,但我不确定。会不会是0 有其他原因?会不会是和0不同的值?

【问题讨论】:

    标签: assembly mips cpu-registers


    【解决方案1】:

    lw 是一条 I 型指令,它使用两个寄存器操作数和一个立即数操作数。

       31-26     25-21   20-16      15-0
     |  op    |  rs    |  rt    |    imm   |
      6 bits    5 bits   5 bits     16 bits
    

    rsimm 始终用作源操作数。

    rt 用作目标寄存器,你知道它包含什么。

    您可能会将此与使用 rd 作为目标操作数的 R 类型混淆。

    这是R型。

       31-26    25-21    20-16    15-11   10-6    5-0
    |   op    |  rs    |  rt    |  rd   | shamt | funct |
      6 bits    5 bits   5 bits  5 bits  5 bits  6 bits
    

    【讨论】:

    • 嗨亚当!感谢你的回答。我知道 lw 指令中没有 rd 寄存器,但是关于寄存器值的练习问我 lw 指令中 Rd 的值是多少。正确答案是 00000(二进制),有点奇怪。但也许,现在我明白了原因:Rd 寄存器占据了 11-15 个指令位置。因此,如果没有 Rd,我想我应该再多取 5 个表示符位的偏移量,因为它们在 11-15 位中……这是一个正确的想法吗?
    • rd 没有在lw 中使用,它是如此简单,这就是为什么在您的回答中可能会告诉它是00000。如果您想知道每个寄存器操作数有多少位,请查看 MIPS 参考表,当然您可以从 `0x805FE371` 中计算出这些位
    • 你还是把 R-type 和 I-Type 混为一谈。在 I-type 中,20-16 位用作目标寄存器。 lw 没有任何 11-15。我更新了我的答案,请看一下。
    • 不,亚当,我明白了! R-type 有rt 作为目标寄存器,我知道。这就是让我感到困惑的地方。 rd 具有 00000 值的唯一两种方式是它没有被使用或者它是 11-15 位的偏移量。我可能会写信给我的教授,我会回信告诉你答案!谢谢你的时间,亚当!
    • kth.se/social/files/54948c82f276540590491ed4/… 这里是 MIPS Reference sheet 的链接,你可以自己查看。很容易理解。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多