“muli”是MIPS指令吗?它在哪里定义?

时间:2015-02-23 06:30:58

标签: assembly mips

如果这是一个愚蠢的问题,我很抱歉,但这让我很难过。

我从类幻灯片中获得以下MIPS代码:

muli $2, $5,4
add  $2, $4,$2
lw $15, 0($2)
lw $16, 4($2)
sw $16, 0($2)
sw $15, 4($2)
jr $31

这个确切的代码将通过谷歌出现,因此它必须是各种大学中使用的一种标准示例。

我理解所有这些,除了在课堂上我假设" muli"是立即倍增(是的,我应该更多地关注)。

现在看来" muli"根本不是一个命令(至少我没有在我的任何参考文献中看到它)。

我错过了什么?

谢谢,

RCM

2 个答案:

答案 0 :(得分:7)

顺便说一句,如果其他人都来搜索同样的问题,经过长时间的搜索,我发现了一些东西。

这是来自上一版教科书的勘误表:

  
    

。     。     。     12 MIPS没有伪指令,其中助记符“muli”如图1.3中间所示。     。     。     

  

所以......这是书中的一个错字。谜团已揭开。耶!

答案 1 :(得分:0)

您原始的MIPS代码是数组内部索引k中相邻值的简单交换。它实现了这个C:

swap(int v[] , int k)
{  
    int temp;
    temp = v[k];
    v[k] = v[k+1];
    v[k+1] = temp;
}

您的代码使用不存在的muli作为4的立即乘,而不是sll $2, $5, 2,作为4字节字的数组索引的一部分。

原始MIPS代码的说明:

  1. k = $ 5
  2. v的基地址= $ 4
  3. v [k]的地址= $ 4(数组v的基地​​址)+(sizeof 整数)4 * $ 5(索引k)
  4. (muli)$ 2 = 4 * $ 5
  5. (加)$ 2 = $ 4 + $ 2
  6. (现在$ 2存储v [k]的地址)

某些其他ISA确实具有立即乘法,例如PowerPC。
根据{{​​3}},muli和mulli是PowerPC / POWER上的相同指令。

muli RT, RA, SI            # PowerPC instruction, not MIPS

此指令将RA寄存器的源和SI立即签名的乘积相乘,结果存入目标寄存器RT