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

MIPS中如何将整数存入数组并打印?代码运行退出报错如何排查

代码问题排查
  • 系统调用类型不匹配:你使用的li $v0, 4是MIPS中打印字符串的系统调用编号,打印整数需要将$v0设为1。
  • 非法内存访问:执行lw $t0, 0($s2)后,$t0中已经存储了数组的整数值,后续lw $a0, 0($t0)会把$t0的整数值当作内存地址去读取数据,触发访问异常。
  • 缺少程序退出逻辑:end标签后没有添加程序退出的系统调用,循环结束后程序会继续执行后续无效内存区域的内容,最终抛出你遇到的运行错误。
正确实现代码
.data
    a: .word 3, 2, 1   # 定义存储3个整数的数组
    space: .asciiz " " # 可选:用于打印数字之间的分隔符,方便阅读
.text
main:   
    li $s0, 0          # i = 0,循环计数
    li $s1, 3          # 数组总长度为3
    la $s2, a          # $s2存储数组首地址
loop:
    beq $s0, $s1, end  # 计数等于数组长度时退出循环
    lw $t0, 0($s2)     # 取出当前数组元素存入$t0
    
    # 打印当前整数
    li $v0, 1
    move $a0, $t0
    syscall
    
    # 可选:打印空格分隔数字
    li $v0, 4
    la $a0, space
    syscall
    
    addi $s2, $s2, 4   # 地址偏移4字节,指向数组下一个元素
    addi $s0, $s0, 1   # 计数+1
    j loop
end:    
    # 程序正常退出系统调用
    li $v0, 10
    syscall
功能实现说明

整数存入数组

  • 静态存储:在.data段使用.word指令直接声明数组的初始值即可,每个整型元素占4字节内存空间。
  • 动态存储:运行时可以通过sw指令,将寄存器中的整数值写入数组对应的内存地址,例如sw $t0, 0($s2)就能把$t0的数值存入$s2指向的数组位置。

数组打印

  1. 提前加载数组首地址、数组长度到对应寄存器
  2. 循环遍历每个数组元素,通过lw指令取出元素值到通用寄存器
  3. 调用打印整数的系统调用($v0=1,$a0存待打印的整数值)
  4. 循环结束后调用退出系统调用($v0=10),避免程序跑飞

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 10:45:06