我有以下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
这个精确的代码将通过google提供,所以它必须是各种学院使用的一种标准示例。
我理解所有这些,在课堂上,我假设"muli“是立即被乘的。(编者注:乘2的幂最好用左移位,如sll $2, $5, 2
,而不是乘法。)没有编译器会发出这样的消息,而且您只会手工编写这种方式来降低这个交换函数的数组索引。)
现在看来,"muli“根本不是一个命令(至少我在任何引用中都没有看到它)。
我遗漏了什么?如果这是个愚蠢的问题,我很抱歉,但这是在阻挠我。
发布于 2015-02-23 12:36:17
顺便说一句,如果其他人来找同样的问题,经过长时间的搜索,我发现了一些东西。
这是上一版教科书的勘误表:
。。。12图1.3中列出的助记符"muli“对MIPS没有伪指令。。。。
所以.这是书中的一个错误。谜团解开了。耶!
发布于 2020-10-11 10:07:58
原始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代码的解释:
其他一些ISAs确实具有即时乘法功能,例如PowerPC.
根据IBM知识中心的说法,muli和mulli在PowerPC/POWER上的指令是相同的。
muli RT, RA, SI # PowerPC instruction, not MIPS
该指令将RA
寄存器源乘以SI
立即签名,将结果放入目标寄存器RT
中。
https://stackoverflow.com/questions/28668054
复制相似问题