首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在MIPS中使用SW和LW访问代码段内存

在MIPS中使用SW和LW访问代码段内存
EN

Stack Overflow用户
提问于 2017-12-25 19:28:31
回答 2查看 1.6K关注 0票数 0

给定指令的地址,可以使用MIPS中的SWLW指令访问代码段内存吗?

例如:

代码语言:javascript
复制
0x1000: ADDI $s1, $zero, 0x1000
0x1004: LW $s2, 4($s1)

代码将加载到$s2中吗?0x0000 (给定数据段为空)或0x1004处指令的二进制表示形式。

编辑:

AFAIK,由于指令内存和数据存储器的分离,MIPS处理器中的流水线是可能的--如果我错了,请纠正我。

编辑2:

我找到了一个question,它的答案意味着可以使用LWSW访问和修改指令。因此,答案是$s2将包含0x1004处指令的二进制表示形式。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-12-25 20:22:52

您将在address 0x1004加载指令的机器编码。

MIPS有一个平面内存模型;将不同的segments of an executable映射/加载到单个平面内存地址空间的不同部分;it's a Von Neumann architecture,其中代码字节和指令字节是相同的东西,并且共享相同的地址空间。

代码地址使用与数据地址相同的地址空间。Martin的回答表明,在权限至少不同的情况下,创建MIPS是可能的,当然,在ROM中使用其代码的嵌入式MIPS无法通过存储来修改其指令。但是即使这样,代码和数据也必须映射到同一物理地址空间的不同部分,即使存储到代码地址错误。可能您可以构建一个MIPS,即使是大量的代码地址都有错误,但这是不可能的。如果禁用该区域/页上的执行权限,跳转到数据地址也可能出错。

如果配置了self-modifying code is possible权限,则在普通MIPS上配置其在内存中的指令。(但是请注意,为了正确起见,您通常需要刷新I-缓存,而Q&A中的代码并没有这样做。)

.data源中的BTW实际上是指链接器最终链接到可执行文件的数据段的.data部分。见What's the difference of section and segment in ELF file format

这里最重要的一点是,可执行文件的片段与x86风格的分段内存是不一样的。(不过,术语也有类似的起源)。

票数 1
EN

Stack Overflow用户

发布于 2017-12-25 20:04:54

取决于“MIPS”是什么意思:

  • 一个真正的MIPS CPU,就像你在某些WLAN路由器中发现的那样?
  • 像SPIM或者火星这样的MIPS模拟器?

对于真正的MIPS CPU,它取决于内存管理单元是如何配置的:

如果内存管理单元允许对代码段的读访问,您实际上将在地址0x1004处获得指令的二进制表示形式。

(顺便说一句:您需要使用addi $s1, $0, 0x1004来确保$s1真正包含0x1004,因为$s1可能包含比0更多的值。)

如果内存管理单元不允许访问代码段,程序将崩溃。(大多数MIPS CPU似乎不允许这种设置。)

如果您使用像SPIM、MARS (或任何其他模拟器)这样的仿真器,则取决于模拟器的工作方式.

理论上可以有三种类型的模拟器:

  • 一些撞车
  • 一些读取二进制表示的
  • 有些人读到了一些“愚蠢”的价值
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47971462

复制
相关文章

相似问题

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