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

为何MIPS汇编代码输出结果总是比预期值大1?

问题分析与解决

哈哈,这个问题我刚学MIPS的时候也踩过坑!你的输出总是比预期大1,核心问题出在这一行代码:

add $a0, $a0, $t0

为什么会多1?

在MIPS模拟器(比如SPIM或者MARS)启动程序时,$a0寄存器的初始值并不是0——绝大多数情况下它的默认初始值是1。你这里用add指令是把计算好的$t0(也就是1+1+1=3)加到了$a0原来的初始值上,所以最终$a0的值就是1+3=4,这就导致每次输出都比预期结果大1。

修正方案

你需要直接把计算结果赋值给$a0,而不是做累加操作。有几种简单的实现方式:

  • 用move指令(最直观易懂):
    move $a0, $t0
    
  • 或者用addi指令将$t0与0相加,本质也是赋值:
    addi $a0, $t0, 0
    
  • 也可以先手动把$a0清零,再执行累加:
    li $a0, 0
    add $a0, $a0, $t0
    

修正后的完整代码如下:

.data
x: .word 1
y: .word 1
z: .word 1

.text
main:
    lw $t0, x
    lw $t1, y
    lw $t2, z
    add $t0, $t0, $t1 # t0= x+y
    add $t0, $t0, $t2 # t0= x+y+z
    move $a0, $t0     # 直接将计算结果存入a0寄存器
    li $v0, 1
    syscall
    li $v0, 10
    syscall

现在再运行这段代码,输出就会是你预期的3啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 18:22:45