增加MIPS中的寄存器

时间:2014-10-29 05:07:04

标签: assembly mips

我的教授给了我们关于MIPS的工作表,但从未真正给出过例子,所以我需要假设我对说明的解释是正确的。我很确定大多数问题都需要ADD和ADDI,但我想仔细检查一下我是否正确使用它。

“提供执行的序列:

到2010年增加15美元

我认为这是ADDI $ 15,$ 15,2010

ADD会更好吗?会有办法实现吗?

还有一个问题要求一个序列“将值12345放在一个单词的内存位置65,528”,这让我很困惑。

2 个答案:

答案 0 :(得分:0)

addi是将文字(我们称之为'立即'值,因此i中的addi)添加到a的值的规范方法注册

如果您不允许使用addi(有些学校不会),您可以合并addlili $reg, immimm(数字文字)的值加载到注册表$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指令集非常在网上有很好的记录,如果你环顾四周。