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

MIPS编程中浮点数打印为何仅$f12寄存器有效?

问题原因及解决方法

这不是寄存器本身的机制问题,而是MIPS系统调用的参数约定导致的:

  • 当你执行li $v0, 2时,触发的是「打印单精度浮点数」的系统调用,这个syscall有固定规则:必须把要输出的单精度浮点数存放在$f12寄存器中,其他浮点寄存器不会被这个系统调用读取。
  • 你用$f1、$f13等寄存器时,$f12其实是未初始化的默认值0.0,所以syscall读取$f12后输出的就是0.0。

如果非要用其他浮点寄存器存储数据,只需要把对应寄存器的值复制到$f12再调用syscall就行,比如:

.data
    half:   .float 0.1

.text
    l.s     $f1, half   # 把0.1加载到$f1
    mov.s   $f12, $f1   # 将$f1的内容复制到$f12
    li      $v0, 2
    syscall

顺带提下其他常见浮点系统调用的约定:

  • li $v0, 3(打印双精度浮点数):需要把数据放在$f12和$f13(双精度占两个寄存器)
  • li $v0, 6(读取单精度浮点数):输入的值会存在$f0

内容的提问来源于stack exchange,提问作者Hân Trần

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 03:17:07