Arrays MIPS LUI和SW LB操作

Arrays MIPS LUI和SW LB操作,arrays,assembly,mips,Arrays,Assembly,Mips,所以我试图解决这个问题,它是这样写的, 考虑到$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的地址为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实际上在地址4+$t0处将$t0写入内存。这意味着内存看起来像:

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

lb$t0,6$t0然后从地址6+$t0=6F900006加载一个有符号字节。它包含90,当符号扩展到32位时为FFFFFF90。这是您的最终值,单位为$t0。

存储区将单词存储到内存中的位置0x6F900004-0x6F90007。谢谢!那么我的最终值是对的?!我认为这是错误的dang@HelpMeBro:这假设有一个小小的endian MIPS机器。MIPS可以在大端或小端模式下运行。MARS模拟了一个小小的endian MIPS,所以这适用于那里。Big-endian MIPS将把单词的字节存储在内存中为6F,90,00,00,因此加载结果将是0@PeterCordes是的,但我故意删除了这一部分,因为问题是:$t0的值是多少?