在意识到使用汇编语言并使用MIPS后我失去了多少之后,我决定从基础开始并真正理解它。
显然MIPS代码有特定的用途,但很多东西似乎都做了类似的事情,而我很难理解其中的一些差异。
加载立即..(li)和加载单词有什么区别..(lw)?我甚至不确定“单词”是什么。或者以下内容:
li $t0,y
lw $t0,0($t0)
是否在第一行加载y到寄存器$ t0?然后加载0($ t0)为y?
对不起,这可能是一个非常愚蠢的问题。如果有人能够解释这两条线正在做什么以及li / lw之间的区别,我会非常感激。谢谢!
答案 0 :(得分:4)
word
是固定长度的位序列。
在MIPS32上,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]
lui
从指令加载一个32位寄存器的高16位,并将低16位设置为零。
ori
获取$regA
的内容,与指令中的16位立即执行按位逻辑OR,并将结果存储回$regA
。
总而言之:li $reg, immediate
将总是将相同的立即放入寄存器,而lw $regA, offset($regB)
将加载当前内存位置offset($regB)
的值。