寄存器中的基数和偏移量

Base and offset in register

首先,像 4($s3) 和 $s3 这样的东西有什么区别?据我了解, 4($s3) 是一个内存地址, $s3 是一个寄存器。我说得对吗?

接下来,下面两种情况下的源寄存器是什么:

  1. lw, $t0, 4($s3)
  2. lw, $t1, 12($s3)

在我看来,这两种情况下的源寄存器都只是“$s3”。有人告诉我这是不正确的,正确答案分别是 4($s3) 和 12($s3)?以下哪个答案是正确的,为什么?

4($s3) 和 $s3 的区别在于前者使用间接寻址(即使用 $s3 中的值来计算您要从中检索信息的地址)。在您陈述的示例中,4($s3) 将引用等于 (register $s3) + 4 中的值的地址。$s3 将仅引用 register $s3 本身。

准确的说,通常叫'source operand/address'而不是'source register',因为它可能不是寄存器。在这种情况下,它是 4($s3) 和 12($s3),因为这是存储要交互的数据的地方。我们正在使用 $s3 中值的间接寻址来定位从(实际来源)检索数据的地址。