了解MIPS程序中lw和sw的实际工作原理

时间:2019-01-10 20:22:59

标签: assembly architecture mips

我很难理解swlw在MIPS程序中的作用。我对该主题的理解是,对于lw,我们使用sw将数据从内存传输到寄存器中,反之亦然。但是,这到底是如何实现的呢?

假设我们有以下代码行:

lw Reg.Dest, Offset(Reg.Source)
sw Reg.Source, Offset(Reg.Dest)

如果我们专注于lw,它实际上是存储来自存储器Reg.Source的数据,并将该数据的地址与Offset相乘,总是$ 4 $的倍数,因为寄存器处理$ 32 $位,内存使用$ 8 $位到寄存器中的一个特定地址,该地址等于Offset + Reg.Source-因此,如果我们说Offset = 16, Reg.Source = $s1 = 12,则寄存器将存储来自存储器的数据进入寄存器中的地址$ 28 $。

假设我对lw的理解是正确的,那么我的问题是sw如何工作?

PS:如果答案也仅包含一个衬里示例,例如sw $t0, 32($s3),那就太好了。

1 个答案:

答案 0 :(得分:0)

lw(加载字)将一个字从内存加载到寄存器。

lw $2, 4($4) # $2 <- mem($4+4)

$ 2是目标寄存器,$ 4是地址寄存器。信息的来源就是记忆。

4是一个偏移量,该偏移量被添加(而不是相乘)到地址寄存器。这种内存访问称为基于地址的访问,在许多情况下非常有用。例如,如果$ 4保留结构的地址,则偏移量允许选择结构的不同字段。或数组中的下一个或上一个元素,等等。offset不必是4的倍数,但是(地址寄存器+ offset)必须并且在大多数情况下都是。

Sw类似,但是将寄存器存储到内存中。

 sw $5, 8($7) # mem[$7+8] <- $5

再次$ 7是保存内存地址的寄存器,$ 8是一个偏移量,$ 5是将要写入内存的信息的来源。

请注意,与其他MIPS指令相反,第一个操作数是源,而不是目标。可能是为了强制执行这样一个事实,即地址寄存器在两条指令中都起着相似的作用,而在lw中,它用于计算数据源的存储地址,而在sw中,它用于存储目标地址。

相关问题