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

MIPS实现数组打印与第三元素乘4功能报错问题求助

问题代码核心缺陷
  • 未按要求拆分3个独立功能函数,所有逻辑与主程序耦合,也未实现对应的函数调用逻辑
  • 主程序输入完成后直接执行jr $ra退出,后续数组处理、打印逻辑完全没有执行
  • 寄存器未做初始化,$t0在使用前未清零,会导致数组写入地址偏移错误
  • 打印逻辑收尾缺失,li $v0, 10后未加syscall,程序无法正常终止
  • 未实现第三个元素乘4的处理逻辑,也未加1-10的输入合法性校验
  • 打印函数未按要求实现分支结构,没有针对第三个元素的特殊处理逻辑
修正后完整可运行代码
.data
    array: .space 20
    init_prompt: .asciiz "请输入5个1到10之间的整数:\n"
    invalid_prompt: .asciiz "输入非法,请重新输入1-10之间的整数:\n"
    print_prefix: .asciiz "数组元素依次为:"
    space: .asciiz " "
    third_tag: .asciiz "(已乘4)"
    newline: .asciiz "\n"
    .align 3
.text
main:
    # 调用数组初始化函数
    jal init_array
    # 调用第三元素乘4处理函数
    jal modify_third_element
    # 调用数组打印函数
    jal print_array
    # 程序正常退出
    li $v0, 10
    syscall

# 数组初始化函数:输入5个1-10的整数存入数组,包含循环+分支结构
init_array:
    li $v0, 4
    la $a0, init_prompt
    syscall
    li $t0, 0 # 数组偏移量初始化
init_loop:
    beq $t0, 20, init_exit # 存满5个元素(20字节)退出
    li $v0, 5
    syscall
    # 输入合法性校验分支
    blt $v0, 1, input_invalid
    bgt $v0, 10, input_invalid
    # 合法则写入数组
    sw $v0, array($t0)
    addi $t0, $t0, 4
    j init_loop
input_invalid:
    li $v0, 4
    la $a0, invalid_prompt
    syscall
    j init_loop
init_exit:
    jr $ra

# 第三元素乘4处理函数:数组索引从0计数,第三个元素对应索引2
modify_third_element:
    lw $t0, array + 8 # 取第三个元素(偏移8=2*4)
    sll $t0, $t0, 2 # 左移2位等价于乘4,效率更高
    sw $t0, array + 8
    jr $ra

# 数组打印函数:输出所有元素,针对第三个元素做特殊标记,包含循环+分支结构
print_array:
    li $v0, 4
    la $a0, print_prefix
    syscall
    li $t0, 0 # 循环计数器
    la $t1, array # 数组基地址
print_loop:
    beq $t0, 5, print_exit
    lw $a0, ($t1)
    li $v0, 1
    syscall
    # 分支判断是否为第三个元素
    bne $t0, 2, print_normal
    # 第三个元素打印标记
    li $v0, 4
    la $a0, third_tag
    syscall
print_normal:
    # 打印分隔空格
    li $v0, 4
    la $a0, space
    syscall
    addi $t0, $t0, 1
    addi $t1, $t1, 4
    j print_loop
print_exit:
    li $v0, 4
    la $a0, newline
    syscall
    jr $ra
代码说明
  • 完全符合需求拆分三个独立函数,主程序仅负责函数调度,逻辑清晰
  • 初始化函数内置输入合法性分支校验,不符合1-10范围的输入会要求重新输入
  • 第三元素处理采用位运算左移实现乘4,比直接乘法指令执行效率更高
  • 打印函数内置分支判断,第三个元素输出时会追加(已乘4)标记,符合循环+分支的要求
  • 所有寄存器使用前均做初始化,无野值访问问题,程序可正常启动、执行、退出

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 23:24:04