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

