sw MIPS指令的替代方法

时间:2019-03-28 19:16:23

标签: assembly mips instructions

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

1 个答案:

答案 0 :(得分:0)

首先,lui / ori从立即数在寄存器中构造一个值,而无需访问数据存储器。它们在任何方面都不等同于lw。也许您在考虑li,它是lui和/或ori的伪指令。只有加载指令才能访问内存;立即的ALU指令从指令本身获取数据,但实际上并不算数。


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

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

在小端模式下,SWL $t1, buf将$ t1的高字节存储到buf的第一个字节中,以对齐buf

在小尾数模式下, 对齐的地址上(例如sw需要 1 ),SWR就像SW,存储所有4个字节。

这些指令很有趣,因为它们可以在一个字中修改1到4个字节。包括3个字节,这是一个sb(字节)或sh(半字)无法做到的。


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

因此在大端模式下,对于对齐的地址,我认为swl等效于sw,但是我尚未测试。


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

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