在MIPS / SPIM中,li和lw有什么区别?

Hab*_*bit 3 assembly mips

在意识到我对汇编语言和使用MIPS的迷茫之后,我决定从基础开始并真正理解它。

显然,MIPS代码具有特定的用途,但是许多内容似乎都具有相似的作用,并且我很难理解其中的一些区别。

加载立即..(li)和加载单词..(lw)有什么区别?我什至不知道什么是“单词”。或以下内容:

li $t0,y
lw $t0,0($t0)
Run Code Online (Sandbox Code Playgroud)

它是否将y加载到第一行的寄存器$ t0中?然后加载0($ t0)作为y?

抱歉,这可能是一个非常愚蠢的问题。如果有人能解释这两行在做什么以及li / lw之间的区别,我将不胜感激。谢谢!

EOF*_*EOF 5

A word是固定长度的位序列。
在MIPS32上,a word为32位宽。
该指令lw $regA, offset($regB)从指定的存储位置将一个字加载offset($regB)到寄存器中regA

相反,li reg, immediate不是真正的指示。没有MIPS CPU可以执行li。这是一条伪指令,汇编程序将其转换为两个指令的序列:

lui $reg, [most significant 16 bits of immediate]
ori $regA, $regA, [least significant 16 bits of immediate]
Run Code Online (Sandbox Code Playgroud)

lui将指令中的立即数加载到32位寄存器的高16位,并将低16位设置为零。
ori接受的内容$regA,对指令的16位立即进行按位逻辑或运算,然后将结果存储回$regA

所以,总结一下:li $reg, immediate始终直接到寄存器中,而lw $regA, offset($regB)将加载电流从存储位置值offset($regB)