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

Is "muli" a MIPS instruction? Where is it defined?

我有以下来自 class 幻灯片的 MIPS 代码(用于交换数组中的相邻元素):

muli , ,4
add  , ,
lw , 0()
lw , 4()
sw , 0()
sw , 4()
jr 

这个确切的代码将通过 google 出现,所以它一定是各种大学使用的一种标准示例。

我都明白了;在 class 中,我假设“muli”是乘法立即数。 (编者注:乘以 2 的幂最好用像 sll , , 2 这样的左移来完成,永远不要乘法。没有编译器会发出这个,你只能手写这种方式来简化数组此交换函数的索引。)

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

我错过了什么?如果这是一个愚蠢的问题,我深表歉意,但这让我很困惑。

顺便说一句,如果有人来搜索同样的问题,经过长时间的搜索我找到了一些东西。

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

. . . 12 There is no pseudoinstruction for MIPS with the mnemonic "muli" as listed in the middle of Figure 1.3. . . .

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

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

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

您的代码使用 non-existent muli 作为 4 的立即数乘法,而不是 sll , , 2,作为 4 字节字数组索引的一部分。

原始MIPS代码的解释:

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

其他一些 ISA 确实有立即乘法,例如 PowerPC。
根据 IBM Knowledge Center muli 和 mulli 在 PowerPC/POWER.

上的指令相同
muli RT, RA, SI            # PowerPC instruction, not MIPS

该指令将 RA 寄存器源和 SI 有符号立即数相乘,将结果放入 RT 目标寄存器。