我正在手工执行MIPS指令,但我不太了解它是如何工作的。在下面给出的示例中,$ t0中的内容从0x00001117变为0x00000080。我不明白为什么。任何帮助都会很棒。
lbu $t0, 5($s0)
lbu (i-type, load byte unsigned)
Registers before Instruction Registers after
Register Contents Register Contents
$t0 0x00001117 $t0 0x00000080
$s0 0x10010010 $s0 0x10010010
$pc 0x0040008c $pc 0x00400090
Memory before Memory After
Location Contents Location Contents
0x10010010 0x00400004 0x10010010 0x00400004
0x10010014 0x00408008 0x10010014 0x00408008
0x10010018 0x0040001c 0x10010018 0x0040001c
答案 0 :(得分:1)
这假定为低端字节的内存布局。
$s0
的值为0x10010010
,因此5($s0)
是指地址0x10010015
的值。
以字节查看时,您的内存内容如下:
+0 +1 +2 +3
-----------------------
0x10010010: 04 00 40 00
0x10010014: 08 80 40 00
...
如您所见,0x10010015
处的字节为0x80
。并且由于lbu
将加载的值零扩展为32位,因此$t0
的高24位被清除。