sw MIPS 指令的替代方案
Alternative for sw MIPS instruction
有什么方法可以将寄存器中的字保存到 RAM 中?
例如,我可以将 lw 命令解释为 lui、ori。不使用 sw 怎么能把 4 Bytes 存入 RAM?
首先,lui
/ori
从立即数构造寄存器中的值,而不访问数据存储器。它们在任何方面都不等同于 lw
。也许您正在考虑 li
,它是 lui
and/or ori
的伪指令。只有加载指令才能访问内存;立即 ALU 指令从指令本身获取数据,但这并不重要。
MIPS 为 loading/storing 未对齐字的左右部分提供成对指令。商店是SWL
(左)和SWR
(商店词右)。
它们的效果取决于您的 MIPS 的字节序模式(它支持大端和小端)。
在小端模式下,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 有一个内核选项来模拟未对齐 load/store 而不是在未对齐的 LW 或 SW 上传送 SIGBUS。
有什么方法可以将寄存器中的字保存到 RAM 中? 例如,我可以将 lw 命令解释为 lui、ori。不使用 sw 怎么能把 4 Bytes 存入 RAM?
首先,lui
/ori
从立即数构造寄存器中的值,而不访问数据存储器。它们在任何方面都不等同于 lw
。也许您正在考虑 li
,它是 lui
and/or ori
的伪指令。只有加载指令才能访问内存;立即 ALU 指令从指令本身获取数据,但这并不重要。
MIPS 为 loading/storing 未对齐字的左右部分提供成对指令。商店是SWL
(左)和SWR
(商店词右)。
它们的效果取决于您的 MIPS 的字节序模式(它支持大端和小端)。
在小端模式下,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 有一个内核选项来模拟未对齐 load/store 而不是在未对齐的 LW 或 SW 上传送 SIGBUS。