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

MIPS汇编中两浮点数求和始终返回0.0问题排查

问题分析与解决

嘿,这个坑我刚学MIPS汇编的时候也踩过!你代码里的计算逻辑完全没问题——$f3里确实存了正确的5.0,但问题出在系统调用的寄存器约定上。

当你用li $v0, 3触发单精度浮点数打印的系统调用时,MIPS的ABI(应用二进制接口)明确要求:要打印的单精度浮点数必须放在$f12寄存器中,而你现在把结果存在$f3里,系统调用根本不会去读取这个寄存器,所以它只能输出$f12的初始值(通常是0.0)。

修改后的代码

只需要在syscall前加一行,把计算结果从$f3复制到$f12就行:

.data
#2.5+2.5=5.0
myNumber1: .float 2.5
myNumber2: .float 2.5
.text
lwc1 $f1, myNumber1
lwc1 $f2, myNumber2
add.s $f3, $f1, $f2
mov.s $f12, $f3  # 把结果移到系统调用要求的寄存器里
li $v0, 3
syscall

补充小知识点

MIPS浮点数相关的系统调用有固定的寄存器规则:

  • 单精度打印(v0=3):用$f12存放要打印的数
  • 双精度打印(v0=2):用$f12和$f13存放双精度数的高低位
  • 单精度输入(v0=6):输入的数会存在$f0里

这样修改后,你就能看到正确的5.0输出啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 20:27:26