You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PCSpim中浮点比较指令语法错误排查:斐波那契序列循环代码问题

PCSpim中浮点比较指令语法错误的解决办法

你遇到的问题很典型——PCSpim(SPIM的Windows版本)只支持基础的MIPS I指令集,而你用的c.ep.d是MIPS后续扩展里的指令,它根本不认识这个助记符,所以才会报语法错误。

具体原因

MIPS的浮点比较指令里,c.ep.d表示“equal or unordered”(相等或无序),这是属于MIPS32等扩展指令集的内容,但PCSpim只兼容早期的MIPS I指令集,没有实现这个指令。而你的需求是判断$f0(剩余的n值)是否等于$f8(0.0),完全不需要这个扩展指令,用基础的相等比较指令就够了。

修复方法

把出错的那一行替换成PCSpim支持的双精度相等比较指令:

c.eq.d $f0, $f8 # 比较$F0(当前n值)与$F8(0.0)是否相等

你的跳转逻辑bc1f loop是对的——当比较结果为“假”(也就是n不等于0)时,继续执行循环,这个逻辑不需要改动。

额外提示

PCSpim对指令的兼容性很严格,如果你不确定某个指令是否支持,可以查看SPIM的官方文档或者自带的指令参考。比如所有基础的双精度浮点比较指令,SPIM支持的是:

  • c.eq.d:相等
  • c.lt.d:小于
  • c.le.d:小于等于
  • c.ne.d:不相等
  • c.gt.d:大于
  • c.ge.d:大于等于

修改后的完整关键代码片段如下:

loop:
add.d $f6, $f4, $f2 #$f6 = f0 + f1
add.d $f2, $f4, $f8 # f0 = f1
add.d $f4, $f6, $f8 # f1 = (f0 + f1)
sub.d $f0, $f0, $f10 # n减1
c.eq.d $f0, $f8 # 替换原来的c.ep.d,比较n与0.0是否相等
bc1f loop #若n不等于0则继续循环

内容的提问来源于stack exchange,提问作者Lord Potato

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 07:42:41