sw MIPS指令的替代方案

问题描述 投票:-2回答:1

将寄存器中的字保存到RAM中的替代方法是什么?例如,我可以将lw命令解释为lui,ori。如何在不使用sw的情况下将4字节存储到RAM中?

assembly mips instructions
1个回答
0
投票

首先,lui / ori从立即构造寄存器中的值,而不访问数据存储器。它们与lw无关。也许你正在考虑li,这是lui和/或ori的伪指令。只有加载指令才能访问内存;立即ALU指令从指令本身获取数据,但这并不重要。


MIPS提供了用于加载/存储未对齐字的左右部分的指令对。商店是SWL(左)和SWR(商店字右)。

它们的效果取决于MIPS的endian模式(它支持大端和小端)。 MARS simulates a MIPS in little-endian mode.

在little-endian模式下,SWL $t1, buf将$ t1的高字节存储到buf的第一个字节,用于对齐的buf

在little-endian模式下,在一个对齐的地址上(如sw requires1),SWR就像SW一样,存储所有4个字节。

这些指令很有意思,因为它们可以修改单词中的1到4个字节。包括3个字节,你不能用一个sb(字节)或sh(半字)。


http://db.cs.duke.edu/courses/fall02/cps104/homework/lwswlr.html解释了如何使用同名的SPARC指令。我认为MIPS(在big-endian模式下)将是相同的,并且像MARS模拟的小端模式中的MIPS就是这样,但是相反。

所以在big-endian模式下,我认为swl相当于sw用于对齐地址,但我还没有测试过。


脚注1:MIPS32R6 removed LWL/R,并要求LW支持未对齐的商店/装载。维基百科没有提到商店,只是加载。

另请参见https://www.linux-mips.org/wiki/Alignment:Linux MIPS有一个内核选项来模拟未对齐的加载/存储,而不是在未对齐的LW或SW上提供SIGBUS。

© www.soinside.com 2019 - 2024. All rights reserved.