"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代码的解释:
- k = $5
- v 的基址 = $4
- v[k]的地址=$4(数组v的基地址)+(sizeof
整数)4*$5(索引k)
- (亩) $2 = 4*$5
- (加)$2 = $4 + $2
- (现在$2存储v[k]的地址)
其他一些 ISA 确实有立即乘法,例如 PowerPC。
根据 IBM Knowledge Center muli 和 mulli 在 PowerPC/POWER.
上的指令相同
muli RT, RA, SI # PowerPC instruction, not MIPS
该指令将 RA
寄存器源和 SI
有符号立即数相乘,将结果放入 RT
目标寄存器。
我有以下来自 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代码的解释:
- k = $5
- v 的基址 = $4
- v[k]的地址=$4(数组v的基地址)+(sizeof 整数)4*$5(索引k)
- (亩) $2 = 4*$5
- (加)$2 = $4 + $2
- (现在$2存储v[k]的地址)
其他一些 ISA 确实有立即乘法,例如 PowerPC。
根据 IBM Knowledge Center muli 和 mulli 在 PowerPC/POWER.
muli RT, RA, SI # PowerPC instruction, not MIPS
该指令将 RA
寄存器源和 SI
有符号立即数相乘,将结果放入 RT
目标寄存器。