Assembly 这行MIPS代码中的偏移量是什么:lw$s0,4($t0)?

Assembly 这行MIPS代码中的偏移量是什么:lw$s0,4($t0)?,assembly,mips,cpu-registers,cpu-architecture,Assembly,Mips,Cpu Registers,Cpu Architecture,不确定偏移量是否意味着将指令从“加载字”程序计数器中取出一行(4字节)并存储到寄存器$s0,4($t0)中。这在内存中是如何工作的?如果可能,请提供例子 LW和SW的功能可以在MIPS指令集中读取,Michael已经说过了 但是,为了快点,我还是在这里提供了一个答案。 LW代表加载字。它从存储该值的地址将32位字值加载到目标寄存器(rt) LW rt, offset(base) 让我们举一个简单的例子: LUI T0, 0x8033 LW T1, 0x2550(T0) 上述代码现在将加载位于

不确定偏移量是否意味着将指令从“加载字”程序计数器中取出一行(4字节)并存储到寄存器$s0,4($t0)中。这在内存中是如何工作的?如果可能,请提供例子

LW和SW的功能可以在MIPS指令集中读取,Michael已经说过了

但是,为了快点,我还是在这里提供了一个答案。 LW代表加载字。它从存储该值的地址将32位字值加载到目标寄存器(rt)

LW rt, offset(base)
让我们举一个简单的例子:

LUI T0, 0x8033
LW T1, 0x2550(T0)
上述代码现在将加载位于以下地址的32位字值:

0x80332550
LUI中的值是地址的上半部分,而提供的偏移量0x2550是下半部分。现在,MIPS只需从0x80332550加载32位值

假设0x80332550包含以下值:

0x80332550: 25 66 99 88 77 14 22 66
在LW指令之后,T1现在将包含值0x25669988。(如果在big-endian上,在little-endian上则为0x88996625)


SW的功能与LW几乎相同,只是它将一个32位的值存储到提供的地址,而不是加载它。在这种情况下,rt寄存器充当值持有者

同样,这在MIPS32中进行了解释™ 程序员体系结构第二卷:MIPS32™ 指令集(查找
lw
)。确实应该有一个离题的话题,“简单的谷歌搜索回答问题。”如[,说明集手册将说明you@Tommylee2k链接是致命的挑剔:
$t0
是基数,0x2555是偏移量。0x80332555不是加载单词的有效地址,因为它不是单词对齐的。@Michael Woops。修复了这个问题。.MIPS认识到0x8033和0x2550是链接的,这是一个奇怪的措辞选择。它更简单迈克,MIPS会按照我们说的做,这是一种获得我们想要的行为的方法。MIPS不需要识别任何东西,只需做数学运算。@PeterCordes也解决了这个问题。