MIPS LUI和SW LB操作

问题描述 投票:0回答:2

所以我正在尝试解决此问题,其内容如下,考虑到$ t0的地址为0x10000000

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

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

arrays assembly mips
2个回答
0
投票

您在$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中的最终值。


0
投票

您有一些不正确的想法。商店将单词存储在内存中的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
© www.soinside.com 2019 - 2024. All rights reserved.