首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >"muli“是MIPS指令吗?它的定义在哪里?

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

Stack Overflow用户
提问于 2015-02-23 06:30:57
回答 2查看 8.6K关注 0票数 6

我有以下MIPS代码(用于从数组中交换相邻元素):

代码语言:javascript
运行
复制
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“根本不是一个命令(至少我在任何引用中都没有看到它)。

我遗漏了什么?如果这是个愚蠢的问题,我很抱歉,但这是在阻挠我。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-23 12:36:17

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

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

。。。12图1.3中列出的助记符"muli“对MIPS没有伪指令。。。。

所以.这是书中的一个错误。谜团解开了。耶!

票数 9
EN

Stack Overflow用户

发布于 2020-10-11 10:07:58

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

代码语言:javascript
运行
复制
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. vk地址=$4(数组的基址v) +(整数的大小)4*$5(索引k)
  4. (muli) $2 =4*5
  5. (加) $2 = $4 + $2
  6. (现为vk $2商店地址)

其他一些ISAs确实具有即时乘法功能,例如PowerPC.

根据IBM知识中心的说法,muli和mulli在PowerPC/POWER上的指令是相同的。

代码语言:javascript
运行
复制
muli RT, RA, SI            # PowerPC instruction, not MIPS

该指令将RA寄存器源乘以SI立即签名,将结果放入目标寄存器RT中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28668054

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档