如果这是一个愚蠢的问题,我很抱歉,但这让我很难过。
我从类幻灯片中获得以下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
答案 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代码的说明:
某些其他ISA确实具有立即乘法,例如PowerPC。
根据{{3}},muli和mulli是PowerPC / POWER上的相同指令。
muli RT, RA, SI # PowerPC instruction, not MIPS
此指令将RA
寄存器的源和SI
立即签名的乘积相乘,结果存入目标寄存器RT
。