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

MIPS汇编程序调试求助:读取用户输入三个数并计算输出其和与平均值的程序运行异常

分析并修复你的MIPS汇编程序问题

咱们一步步拆解你代码里的问题,然后逐个修正:

先看核心错误点

  • 未保存第三个输入数字:你读取第三个数字的syscall(li $v0,5)执行后,没把返回的输入值从$v0存到$t3里,直接就用$t3参与求和了——这时候$t3是未初始化的垃圾值,求和结果肯定不对。
  • 除法指令用法错误:MIPS的div指令不需要指定结果寄存器,它会把商存在$lo寄存器、余数存在$hi寄存器。你得先用div执行除法,再用mflo把商取出来用。
  • 缺失平均值的提示输出:你直接输出了平均值数字,但没先打印fnum("Average is: ")这个提示字符串,不符合你原本的输出需求。

修正后的完整代码

.data
prompt: .asciiz "Enter number 1: "
prompt2: .asciiz "Enter number 2: "
prompt3: .asciiz "Enter number 3: "
newline: .asciiz "\n"
fnum: .asciiz "Average is: "
snum: .asciiz "Sum is: "
.text
.globl main
main:
    # 读取第一个数字
    li $v0, 4
    la $a0, prompt
    syscall
    li $v0, 5
    syscall
    move $t1, $v0

    # 读取第二个数字
    li $v0, 4
    la $a0, prompt2
    syscall
    li $v0, 5
    syscall
    move $t2, $v0

    # 读取第三个数字(修复:保存输入值到$t3)
    li $v0, 4
    la $a0, prompt3
    syscall
    li $v0, 5
    syscall
    move $t3, $v0  # 这行是你原本缺失的关键代码!

    # 计算三个数的和
    add $t4,$t1,$t2
    add $t4,$t4,$t3

    # 输出和
    li $v0, 4
    la $a0, snum
    syscall
    move $a0, $t4
    li $v0, 1
    syscall
    li $v0, 4
    la $a0, newline
    syscall

    # 计算并输出平均值(修复除法逻辑+添加提示)
    li $v0, 4
    la $a0, fnum  # 先打印平均值提示
    syscall
    li $t5,3
    div $t4, $t5  # 被除数$t4,除数$t5,商自动存在$lo寄存器
    mflo $t6      # 把商从$lo转移到$t6
    move $a0, $t6
    li $v0, 1
    syscall

    # 程序正常退出(避免后续执行未知代码)
    li $v0, 10
    syscall

关键修正说明

  1. 保存第三个输入值:添加move $t3, $v0确保第三个输入的数值被正确存储,能正常参与求和计算。
  2. 正确使用除法指令:
    • 用div $t4, $t5表示将总和$t4除以3($t5)
    • 用mflo $t6把除法得到的商从$lo寄存器取出,用于后续输出
  3. 补全平均值提示:在输出平均值前先打印fnum字符串,符合你想要的输出格式
  4. 添加退出指令:最后加上li $v0,10和syscall,让程序正常结束,避免出现异常行为

现在这个程序就能正常读取三个数字,正确计算并输出它们的和与平均值了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 11:58:13