在MIPS中加载和存储字节

时间:2015-02-24 22:28:47

标签: mips

明天我正在读考试,我对加载/存储字节主题感到困惑。我有这个例子:

我不明白他是如何得到红色的答案的。有人可以帮我解释一下吗?

1 个答案:

答案 0 :(得分:15)

add    $s3, $zero, $zero

执行加法$s3 = 0 + 0,有效地将寄存器$s3设置为零。

lb     $t0, 1($s3)

l b yte从内存中的位置添加到寄存器$t0中。内存地址由1($s3)给出,表示地址$s3+1。这将是内存中的0 + 1 =第一个字节。由于我们有一个大端架构,我们读取字节为4字节块"大端优先"。

byte:  0   1   2   3
      00  90  12  A0

第0个字节为00,第1个字节为90。因此,我们将字节90加载到$t0

sb     $t0, 6($s3)

s b yte从寄存器$t0转换为6($s3)给出的内存地址。这意味着地址$s3+6

byte:  4   5   6   7
      FF  FF  FF  FF

成为

byte:  4   5   6   7
      FF  FF  90  FF

现在,如果架构是little-endian怎么办?这意味着字节被安排"小结束"在内存中,所以第二和第三条指令的效果会发生变化。

lb     $t0, 1($s3)

这会将内存地址1中的字节加载到寄存器$t0中。但是现在这些地址都是"小结束",所以我们将12读入寄存器。

byte:  3   2   1   0
      00  90  12  A0

下一步...

sb     $t0, 6($s3)

将寄存器$t0中的字节12存储到存储器地址中6.再次使用little-endian架构:

byte:  7   6   5   4
      FF  FF  FF  FF

成为

byte:  7   6   5   4
      FF  12  FF  FF
相关问题