【问题标题】:How are the address of the memory and that of the register connected?(AddrConstant MIPS instruction)内存地址和寄存器地址是怎么连接的?(AddrConstant MIPS指令)
【发布时间】:2014-04-02 14:49:18
【问题描述】:

在我的计算机组织课程中,我遇到了这些基本的 MIPS 指令:

lw   $to, AddrConstant4($s1)  //&t0 = constant 4
add  $s3, $s3, St0            //$s3 = $s3 + $t0 ($t0 == 4)

老师说$s1是一个寄存器地址,常量4存放在内存中。

在我看来,内存地址和寄存器地址似乎是脱节的。

想问一下电脑是怎么从$s1的寄存器头地址到内存地址的, 或者内存地址和寄存器地址是怎么连接的?

【问题讨论】:

    标签: mips cpu-registers computer-architecture


    【解决方案1】:

    lw $t, offset($s) 被编码为

    1000 11ss ssst tttt iiii iiii iiii iiii
    

    其中100011 是操作码,sssss 是基地址寄存器的编号,ttttt 是目标寄存器的编号,iiiiiiiiiiiiiiii 是立即有符号偏移量。

    如果是lw $t0, 4($s1),那就是:

    1000 1110 0010 1000 0000 0000 0000 0100
    

    $s1是寄存器$17,即10001。$t0是寄存器$8,即01000)

    当CPU遇到这个指令字时,它从位模式中知道这是一个lw,因此它形成了一个由寄存器号sssss的值+立即偏移量(符号扩展)形成的有效地址,从该地址加载一个字并将该值存储在寄存器号 ttttt 中。


    参考:
    MIPS register table
    MIPS instruction set reference

    【讨论】:

      猜你喜欢
      • 2018-10-22
      • 1970-01-01
      • 2013-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-13
      • 2011-09-12
      • 2011-05-25
      相关资源
      最近更新 更多