明天我正在读考试,我对加载/存储字节主题感到困惑。我有这个例子:
我不明白他是如何得到红色的答案的。有人可以帮我解释一下吗?
答案 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