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

Assembly 在MIPS/SPIM中,li和lw之间有什么区别?,assembly,mips,Assembly,Mips,在意识到我对汇编语言和MIPS的使用有多么迷茫之后,我决定从基础开始,真正理解它 显然,MIPS代码有特定的用途,但很多东西似乎都做了类似的事情,我很难理解其中的一些差异 立即加载和。。(李)并加载一个单词。。(lw)?我甚至不知道“单词”是什么。或者,以下内容是什么: li $t0,y lw $t0,0($t0) 是否正在将y加载到第一行的寄存器$t0中?然后加载0($t0)作为y 对不起,这可能是一个非常愚蠢的问题。如果有人能解释一下这两行代码的作用以及li/lw之间的区别,我将不胜感激。

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

显然,MIPS代码有特定的用途,但很多东西似乎都做了类似的事情,我很难理解其中的一些差异

立即加载和。。(李)并加载一个单词。。(lw)?我甚至不知道“单词”是什么。或者,以下内容是什么:

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


对不起,这可能是一个非常愚蠢的问题。如果有人能解释一下这两行代码的作用以及li/lw之间的区别,我将不胜感激。谢谢

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

相反,
li reg,立即指令
不是真正的指令。没有MIPS cpu可以执行
li
。它是一条伪指令,由汇编程序转换成两条指令的序列:

lui $reg, [most significant 16 bits of immediate]
ori $regA, $regA, [least significant 16 bits of immediate]
lui
使用指令中的立即常数加载32位寄存器的上16位,将下16位设置为零。
ori
获取
$regA
的内容,对指令中的16位立即数执行位逻辑OR,并将结果存储回
$regA


总之:
li$reg,immediate
将始终将相同的立即数放入寄存器,而
lw$regA,offset($regB)
将从内存位置
offset($regB)
加载当前值