【发布时间】:2019-06-05 18:38:20
【问题描述】:
我很难理解 sw 和 lw 在 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),那就太好了。
【问题讨论】:
-
可能相关:stackoverflow.com/a/54066664/4271923(虽然您的措辞和问题似乎有点混乱,并且使用了不精确的措辞,这很难说您是否也感到困惑,或者只是不使用“行话”)
-
还有一个额外的注意... 32位寄存器物理上直接存储在CPU芯片上,因此CPU在指令中使用它们非常快(但您只有32个寄存器可用MIPS CPU = 32*4 = 128 字节,而计算机内存芯片通常以千/百万/十亿字节大小)。要从内存加载/存储任何东西,它需要更多的时间,因为内存是不同的芯片,CPU必须与内存芯片进行额外的通信,告诉它选择哪个地址并等待读取,或发送值以写入它(这就是
sw所做的)。 -
官方文档不是已经充分解释了这一点吗?例如:
SW rt, offset(base)描述:memory[base+offset] ← rt寄存器 rt 的最低有效 32 位字存储在内存中由对齐的有效地址指定的位置。将 16 位带符号的 offset 添加到 GPR base 的内容中,形成有效地址。
标签: assembly mips cpu-architecture