MIPS编程实现根据用户输入分配数组并填充整数的问题
MIPS 动态数组分配与填充实现方案
核心实现逻辑
- 首先读取用户输入的数组长度,可根据自身需求补充非正输入的异常处理逻辑,本示例默认用户输入为正整数
- 调用MIPS系统调用完成堆内存分配,单个int类型整数占4字节,总分配字节数 = 数组长度 × 4
- 启动循环读取用户输入的整数,依次写入数组对应偏移地址完成填充
可运行示例代码
.data prompt_len: .asciiz "请输入数组长度:" prompt_elem: .asciiz "请输入第" prompt_elem_suffix: .asciiz "个整数:" .text .globl main main: # 1. 读取用户输入的数组长度 li $v0, 4 la $a0, prompt_len syscall li $v0, 5 syscall move $s0, $v0 # $s0 寄存器存储数组长度 # 2. 分配对应大小的堆内存作为数组存储空间 li $v0, 9 mul $a0, $s0, 4 # 计算需要分配的总字节数 syscall move $s1, $v0 # $s1 寄存器存储数组首地址 # 3. 循环读取整数填充数组 li $s2, 0 # $s2 作为循环计数器 fill_loop: bge $s2, $s0, fill_end # 计数器等于数组长度时结束循环 # 输出输入提示 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 mul $t0, $s2, 4 # 计算当前元素的偏移地址 add $t1, $s1, $t0 sw $v0, 0($t1) # 将输入的整数存入数组对应位置 addi $s2, $s2, 1 # 计数器自增 j fill_loop fill_end: # 此处可添加后续数组处理逻辑 li $v0, 10 syscall
关键接口说明
syscall 5:MIPS读取整数输入的系统调用,输入的返回值存储在$v0寄存器中syscall 9:MIPS堆内存分配系统调用,需要提前在$a0寄存器传入要分配的字节数,返回的内存首地址存储在$v0寄存器中- 数组元素采用基地址+偏移量的方式访问,偏移量为元素下标 × 单元素占用字节数(int类型固定为4)
内容的提问来源于stack exchange,提问作者user16438868
相关产品推荐
相关产品推荐

