处理li的MIPS伪指令(大、小)

处理li的MIPS伪指令(大、小),mips,Mips,作为免责声明,这是一项学校作业,但我一直试图了解我的家庭作业的这一特定部分几个小时,我没有找到任何解决办法。我在谷歌上搜索过,试图查找视频,读过我的书,等等 我有一个普通MIPS指令的一般要点(仍然是一个初学者),但我对一些伪指令感到非常困惑。我们被要求将10或12条伪指令转换为MIPS指令 我理解简单的伪指令,例如: move &t1, $t2 # add $t1, $t2, $zero 但我对那些涉及“大”、“小”和“李”的问题感到非常困惑 li$t1,small(我们得到的提示是

作为免责声明,这是一项学校作业,但我一直试图了解我的家庭作业的这一特定部分几个小时,我没有找到任何解决办法。我在谷歌上搜索过,试图查找视频,读过我的书,等等

我有一个普通MIPS指令的一般要点(仍然是一个初学者),但我对一些伪指令感到非常困惑。我们被要求将10或12条伪指令转换为MIPS指令

我理解简单的伪指令,例如:

move &t1, $t2 # add $t1, $t2, $zero
但我对那些涉及“大”、“小”和“李”的问题感到非常困惑

li$t1,small
(我们得到的提示是“$t1=small”,这对我来说毫无意义,在这个上下文中什么是“small”

我感到困惑的是,通常一个立即数与硬编码值有关,比如1或5,但我看不到硬编码值。我应该在$t1中存储什么?我知道小的是16位的数字,大的是32位的,但是在这个伪指令中它们引用的是什么数字呢?这里只有一个寄存器,没有硬值,我在$t1中加载什么


非常感谢。

我猜
small
==适合16位的任何数字,
large
==适合32位但需要超过16位的任何数字。如果不确定,请你的老师核实。迈克尔[可能]是正确的。对于16位(例如,
li$t1,97
-->
addi$t1,$0,97
)。对于32位,(例如,
li$t1,0x12345678
-->
lui$t1,0x1234
ori$t1,t1,0x5678
。对于32位的情况,请注意,您不能总是使用“equale”(例如,在spim中:
big=0x12345678
在mars中:
.eqv big 0x12345678
),因为没有语法用于:
lui$t1,UP(big)
ori$t1,t1,LO(big)where[在C宏中]:
\define UP(x)x>>16和
define(x)x&0xffff
。只有汇编器可以在内部执行UP/LO。同样地,对于
la
一些汇编程序将提供UP/LO,但是mars/spim仍然完全不清楚。如果问题中没有指定16位值,我如何编写将16位值存储到$t1中的解决方案?我很迷路,今天读了很多书。我是MIPS的初学者,所以我可能误解了这个问题。更糟糕的是,我正试图在SPIM中运行代码,以了解它们实际上在做什么,以及每一个。单身。我尝试的代码位(来自网络的示例)在Mac上的SPIM中抛出错误。非常令人沮丧。@Michael你是对的,小标签和大标签只是代表该类别任何数量的“变量”。我很困惑,因为那个部分说我们必须是“真正的”mips代码,我知道mips代码不能没有任何关于这些标签的说明,所以我不知道他们在问什么,但是的,你是正确的。如果你想做出“回答”,我会接受它的声誉。