我的教授给了我们关于MIPS的工作表,但从未真正给出过例子,所以我需要假设我对说明的解释是正确的。我很确定大多数问题都需要ADD和ADDI,但我想仔细检查一下我是否正确使用它。
“提供执行的序列:
到2010年增加15美元
我认为这是ADDI $ 15,$ 15,2010
ADD会更好吗?会有办法实现吗?
还有一个问题要求一个序列“将值12345放在一个单词的内存位置65,528”,这让我很困惑。
答案 0 :(得分:0)
addi
是将文字(我们称之为'立即'值,因此i
中的addi
)添加到a的值的规范方法注册
如果您不允许使用addi
(有些学校不会),您可以合并add
和li
。 li $reg, imm
将imm
(数字文字)的值加载到注册表$reg
中。
就什么效果更好而言,如果存在任何差异,那么它可以忽略不计。如果有的话,addi
将在一个CPU周期内更快。对于大多数目的而言,这种差异是不容忽视的,并不重要。在学术环境中,它几乎绝对没有关系。
关于你的第二个问题:措辞不是很明确,但是你被要求将一个直接值存储到内存中的某个位置。除非你的教授根本没有谈论这些说明,否则你的工作表上至少应该有一条可以做类似事情的说明。
看看
sw
。您需要做一些预处理,但它会让您继续前进。
答案 1 :(得分:0)
以下是一些如何做的例子,不一定是"最佳"指令序列;
ADDI
向寄存器添加一个立即值,并将结果存储在另一个寄存器中,而ADD
添加两个寄存器并将值存储在第三个寄存器中。
例如,您的"添加2010"任务都可以通过ADDI
更简单地完成,因为您需要先将值2010存储在寄存器中才能使用ADD
;
ADDI $15, $15, 2010
或(例如);
ORI $1, $0, 2010 ; store the value 2010 in $1
ADD $15, $15, $1 ; add $1 with $15, store result in $15
在这种情况下ADDI
更简单。如果要添加的值不符合ADD
立即值允许的16位有符号值,则使用ADDI
会更有意义。
作为第二个问题的示例,您可以轻松地将所需的值存储在寄存器中;
ORI $14, $0, 12345
ORI $15, $0, 65528
...然后你可以使用SW
来存储单词;
SW $14, 0($15)
如果您的教授的教学列表没有提供足够的信息,this page是一个非常好的起点,尽管MIPS指令集非常在网上有很好的记录,如果你环顾四周。