MIPS汇编程序问题:用户提示无法显示及三整数平均值计算
MIPS汇编提示不显示及代码错误修正
问题分析
- 提示信息无法显示:打印字符串需使用系统调用号4(
li $v0,4),但你开头误用了读整数的系统调用5,导致prompt字符串根本没被执行打印操作。 - 平均值计算错误:MIPS的
div指令是将被除数和除数传入寄存器后,商默认存在$lo寄存器,你直接给$a0赋值的写法不合法,需要用mflo取出商再打印。 - 遗漏总和数值输出:代码只打印了总和的提示字符串,没有输出计算好的总和结果。
- 字符串拼写错误:
Avergae应为Average。
修正后的完整代码
.data prompt: .asciiz "Enter three numbers: " sum_msg: .asciiz "The Sum is: " avg_msg: .asciiz "The Average is: " newline: .asciiz "\n" # 用于换行优化输出格式 .text # 打印输入提示 li $v0, 4 # 系统调用4:打印字符串 la $a0, prompt syscall # 读取第一个整数并保存 li $v0, 5 # 系统调用5:读取整数 syscall move $s0, $v0 # 结果存入$s0 # 读取第二个整数并保存 li $v0, 5 syscall move $s1, $v0 # 读取第三个整数并保存 li $v0, 5 syscall move $s2, $v0 # 计算三个数的总和 add $s3, $s0, $s1 add $s3, $s3, $s2 # 打印总和提示字符串 li $v0, 4 la $a0, sum_msg syscall # 打印总和数值 li $v0, 1 # 系统调用1:打印整数 move $a0, $s3 syscall # 换行 li $v0, 4 la $a0, newline syscall # 打印平均值提示字符串 li $v0, 4 la $a0, avg_msg syscall # 计算并打印平均值 li $t1, 3 div $s3, $t1 # 总和$s3除以3,商存储在$lo寄存器 mflo $a0 # 将$lo中的商转移到$a0 li $v0, 1 syscall # 退出程序 li $v0, 10 syscall
关键修正说明
- 调整系统调用顺序:先打印提示信息,再读取整数,确保用户能看到输入提示。
- 补充总和数值的打印步骤,让输出逻辑完整。
- 修正
div指令的使用方式,通过mflo寄存器获取除法结果的商。 - 修正拼写错误,并新增换行字符串优化输出的可读性。
内容的提问来源于stack exchange,提问作者SetDivision
相关产品推荐
相关产品推荐

