当我向MIPS中的“临时寄存器”提供偏移量时会发生什么

时间:2015-07-21 21:11:15

标签: mips

例如:

    $t0 = A
    $t1 = B
    $t2 = C

如果我执行以下命令

 lw $t1, 4($t0)

是否会将$t2加载到$t1

2 个答案:

答案 0 :(得分:0)

只要您的临时寄存器在内存中彼此相邻。 即。

 Reference:   $t1                     $t2
 Mem Blocks: [byte][byte][byte][byte][byte][byte][byte][byte]...

Logisim这样的程序应该紧密包装寄存器。

来自加州大学伯克利分校的有用页面here

答案 1 :(得分:0)

  

如果我执行以下命令

lw $t1, 4($t0)
     

它会将$ t2加载到$ t1吗?

不,它不会。 lw指令用于从内存加载数据,将一个寄存器的值复制到另一个寄存器中。引用MIPS手册:

  

LW rt, offset(base) MIPS32(MIPS I)

  的目的:
  将内存中的单词作为带符号值加载

     

说明: rt ← memory[base+offset]
  获取由对齐的有效地址指定的存储单元位的32位字的内容,   必要时符号扩展到GPR寄存器长度,并放置在GPR rt 中。 16位带符号的偏移被添加到   GPR base 的内容构成有效地址。

换句话说,lw $t1, 4($t0)通过将$t0的值与值4相加来形成有效地址,并将该地址中的一个字(四个字节)加载到寄存器{{1 }}