【发布时间】:2019-03-15 20:29:59
【问题描述】:
如果您需要在 MIPS 中将两个任意有符号数相乘,是否有理由更喜欢:
mul $t0 $s0 $s1
或者这个:
mult $s0 $s1
mflo $t0
?
我在网上找到了关于每个含义的不一致答案。乍一看,我希望前者是后者的伪指令。 (甚至有一个网页声称这一点。)但是查看机器代码,mult 似乎是一个有效的 R 型指令(操作码 0),而 mul 有一个非零操作码(0x1c),所以应该t 是 R 类型,即使它包含 3 个寄存器?!
RISC 哲学说要经常使用伪指令,因为我们只有有限的真实指令。但我只是没有想到为什么你需要两种不同的乘法方式。两者都会影响lo 和hi(使用 MARS),因此您可以使用其中任何一个来检查溢出。那么为什么会出现冗余呢?为什么不告诉大家一直使用mul?
【问题讨论】:
-
(在有人问之前:我不是学生。我是一名试图理解、阻止学生提问的老师。)
-
“我在网上找到了关于每个含义的不一致答案。” 我建议按照 MIPS32™ 程序员架构第二卷的内容:在查看任何在线答案之前,MIPS32™ 指令集会说。
-
仅供参考,为此目的有Computer Science Educators
-
@phuclv:这是关于如何将知识传授给学生的问题。这个问题不属于那里,这是一个关于 MIPS 乘法指令的严格技术问题,而不是关于如何教学生这些指令。 (为什么不告诉大家一直使用 mul? 是关于混淆在线搜索结果,而不是关于如何教学生)
标签: assembly mips instruction-set risc