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
.
中的最终值
所以我正在尝试解决这个问题,它的内容如下, 考虑到$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
.