所以我正在尝试解决此问题,其内容如下,考虑到$ t0的地址为0x10000000
lui $t0,0x6F90
sw $t0,4($t0)
lb $t0,6($t0)
小尾数格式的$ t0的值是多少?因此,在执行第一个操作后,我得到了$ t0 = 6F90000,之后我将$ t0存储在位置4中,该位置基本上是在复制$ t0,所以$ t0 = 6F900006F90000。之后,我转到位置6并提取字节,在这种情况下为90,并扩展其信号,因此答案应为0xFFFFFF90,但是我的同事告诉我它的错误,因此不会向我解释。谁能告诉我我做错了什么
您在$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
中的最终值。
您有一些不正确的想法。商店将单词存储在内存中的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