首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >理解`lw`和`sw`在MIPS程序中的实际工作方式

理解`lw`和`sw`在MIPS程序中的实际工作方式
EN

Stack Overflow用户
提问于 2019-01-11 04:22:59
回答 1查看 52.7K关注 0票数 7

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

假设我们有下面这行代码:

代码语言:javascript
运行
复制
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),那就太好了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-11 05:03:31

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

代码语言:javascript
运行
复制
lw $2, 4($4) # $2 <- mem($4+4)

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

4是与地址寄存器相加(不相乘)的偏移量。这种类型的内存访问被称为基于寻址,在许多情况下它非常有用。例如,如果$4包含结构的地址,则偏移量允许选择结构的不同字段。或数组中的下一个或前一个元素等,偏移量不必是4的倍数,但(地址寄存器+偏移量)必须且大多数情况下两者都是。

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

代码语言:javascript
运行
复制
 sw $5, 8($7) # mem[$7+8] <- $5

同样,$7是保存内存地址的寄存器,8是偏移量,$5是将写入内存的信息源。

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

票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54136371

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档