MIPS LUI 和 SW LB 操作

MIPS LUI and SW LB Operations

所以我正在尝试解决这个问题,它的内容如下, 考虑到$t0的地址是0x10000000

lui $t0,0x6F90
sw $t0,4($t0)
lb $t0,6($t0)

小端格式的 $t0 的值是多少? 所以我在第一次操作后得到 $t0=6F90000,之后我将 $t0 存储在位置 4,这基本上是复制 $t0,所以 $t0=6F900006F90000。 之后我转到位置 6 并提取字节,在本例中为 90 并扩展其信号,因此答案应该是 0xFFFFFF90,但我的同事告诉我这是错误的并且不会向我解释。 谁能告诉我我做错了什么

你有一些不正确的想法。存储将一个字存储到内存中的位置 0x6F900004-0x6F900007。

lui $t0, 0x6F90      # sets $t0 to 0x6F900000
sw  $t0, 4($t0)      # stores to memory at addresses 0x6F900004-0x6F900007; does not change $t0
lb  $t0, 6($t0)      # $t0=FFFFFF90

您在 $t0=6F900006F90000 处出错了。这显然不可能发生,因为 $t0 是一个 32 位寄存器。 sw $t0,4($t0) 实际上是将 $t0 写入内存 地址 4+$t0。所以这意味着内存看起来像:

address   value
6F900004:  00
6F900005:  00
6F900006:  90
6F900007:  6F

然后 lb $t0,6($t0) 从地址 6+$t0 = 6F900006 加载一个带符号的字节。其中包含 90,当符号扩展到 32 位时,它是 FFFFFF90。这是您在 $t0.

中的最终值