MIPS基于R[i+j] += P[i] * Q[j]实现多项式乘法结果异常修复
问题原因排查
你遇到的问题确实是数值累加逻辑的编写错误,核心错误有两处:
- 累加计算的顺序完全颠倒,你先将新的乘积直接覆盖写入R数组对应位置,才执行累加操作,之前存储的旧累加值直接被覆盖丢失
- 累加后的结果没有回写到R数组,累加计算完全没有生效
错误代码段定位
你现有inner循环中的这三行存在逻辑错误:
lw $t8, R($t7) sw $t6, R($t7) #store $t6 on R[$t7] add $t8, $t8, $t6
修复方案
将上述三行替换为以下逻辑即可:
lw $t8, R($t7) # 先读取R[i+j]当前已有的累加值 add $t8, $t8, $t6 # 累加本次计算的乘积P[i]*Q[j] sw $t8, R($t7) # 将累加后的新值写回R[i+j]位置
验证说明
修复后计算逻辑完全符合R[i+j] += P[i] * Q[j]的要求,可得到你预期的输出:
- R[2] 正确累加得
2*3 + 3*(-1) + 4*3 = 15 - R[3] 正确累加得
3*3 + 4*(-1) + (-5)*3 = -10
其余位置的数值因为不需要多次累加,原逻辑下结果本身正确,修复后也不会发生变化。
注:你代码中
outer、inner循环的注释内容和实际判断条件不符、la $s0, R加载的R地址未使用,属于不影响运行的冗余问题,可根据需要自行调整。
内容的提问来源于stack exchange,提问作者vale383
相关产品推荐
相关产品推荐

