首页 > 解决方案 > 手动执行 lb MIPS 指令

问题描述

我正在手动执行 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

标签: mips

解决方案


这假设一个小端内存布局。

$s0有值0x10010010,所以5($s0)指的是地址处的值0x10010015

以字节形式查看的内存内容如下所示:

            +0 +1 +2 +3
-----------------------
0x10010010: 04 00 40 00
0x10010014: 08 80 40 00
...

如您所见,位于的字节0x100100150x80. 并且由于lbu将加载的值零扩展为 32 位,因此高 24 位$t0被清除。


推荐阅读