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
相关产品推荐
相关产品推荐

