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

MIPS访问数组所有索引并输出 实现指定Java代码的等价功能

MIPS动态数组读写实现方案

实现逻辑说明

对应你提供的Java参考代码,额外补充了数组元素打印的逻辑,完整覆盖「读取数组长度→输入数组元素→打印全部元素」的需求,核心步骤如下:

  • 调用系统读取用户输入的数组长度N
  • 按N*4字节的大小在堆区申请内存作为数组存储空间
  • 循环N次读取用户输入的整数,依次存入数组对应位置
  • 再次循环N次依次读取数组元素并打印输出

完整MIPS实现代码

.data
prompt_len: .asciiz "请输入数组长度:"
prompt_elem: .asciiz "请输入数组第"
prompt_elem_suffix: .asciiz "个元素:"
print_prefix: .asciiz "数组全部元素为:"
space: .asciiz " "

.text
.globl main
main:
    # 打印数组长度输入提示
    li $v0, 4
    la $a0, prompt_len
    syscall

    # 读取数组长度N存入$s0
    li $v0, 5
    syscall
    move $s0, $v0

    # 申请堆空间:N*4字节,数组首地址存入$s1
    li $v0, 9
    sll $a0, $s0, 2 # 左移2位等价于乘以4,计算需要的字节数
    syscall
    move $s1, $v0

    # 初始化输入循环计数器i=0存入$s2
    li $s2, 0
input_loop:
    bge $s2, $s0, input_end #  i >= N时结束输入循环

    # 打印元素输入提示
    li $v0, 4
    la $a0, prompt_elem
    syscall
    li $v0, 1
    addi $a0, $s2, 1 # 展示给用户的序号从1开始
    syscall
    li $v0, 4
    la $a0, prompt_elem_suffix
    syscall

    # 读取用户输入的元素
    li $v0, 5
    syscall

    # 计算元素存储地址:数组首地址 + i*4
    sll $t0, $s2, 2
    add $t0, $t0, $s1
    sw $v0, 0($t0) # 将输入值存入数组对应位置

    addi $s2, $s2, 1 # 计数器+1
    j input_loop
input_end:

    # 打印输出前缀
    li $v0, 4
    la $a0, print_prefix
    syscall

    # 重置打印循环计数器i=0
    li $s2, 0
print_loop:
    bge $s2, $s0, print_end # i >= N时结束打印循环

    # 读取数组对应位置的元素
    sll $t0, $s2, 2
    add $t0, $t0, $s1
    lw $a0, 0($t0)

    # 打印元素
    li $v0, 1
    syscall

    # 打印空格分隔元素
    li $v0, 4
    la $a0, space
    syscall

    addi $s2, $s2, 1 # 计数器+1
    j print_loop
print_end:

    # 程序正常退出
    li $v0, 10
    syscall

代码说明

  • 寄存器约定:$s0存储数组长度N,$s1存储数组首地址,$s2存储循环计数器i
  • 堆内存申请使用系统调用号9,传入参数为需要申请的字节数,返回的内存首地址默认存在$v0中
  • 数组元素寻址采用「首地址 + 索引*4」的计算方式,符合MIPS字节寻址规则
  • 额外添加的输入提示、分隔空格逻辑可以根据需求自行删除,不影响核心功能运行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 21:09:04