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
相关产品推荐
相关产品推荐

