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

如何在MIPS_o32汇编中读取并存储用户输入?

MIPS_o32汇编读取用户输入后存储问题

我正在尝试使用MIPS_o32汇编读取用户输入,目前已实现读取功能,但尚未搞清楚如何存储输入内容。之前看视频中有人直接将$v0的值存入$s0,但推测这些视频使用的是其他版本的MIPS。

我的代码如下:

.section .text

.global __start

__start:
    ; STDIN = 0
    ; STDOUT = 1
    ; STDERR = 2
    
    li $v0, 4003
    li $a0, 0
    la $a1, $v0 ; stuck here
    li $a2, 4
    syscall

    li $v0, 4001
    li $a0, 0
    syscall

.data

msg: .asciz "Input Number: \n"

out: .asciz "Your number is: \n"

目前我参考的资源有:

  • MIPS_o32系统调用列表文档
  • MIPS32快速参考手册
  • MIPS汇编指令总结手册

问题分析与解决方法

你代码里的核心错误是la $a1, $v0这行:la是加载内存地址的指令,这里错误地将寄存器$v0当作内存地址使用。在MIPS_o32的read系统调用(编号4003)中,$a1需要传入的是用于存储输入数据的内存缓冲区地址,而非寄存器。

修正后的完整代码

.section .text

.global __start

__start:
    ; 打印输入提示信息
    li $v0, 4004       # write系统调用编号
    li $a0, 1          # 输出目标为STDOUT
    la $a1, msg        # 加载提示信息的内存地址
    li $a2, 15         # 提示信息的字节长度("Input Number: \n"共15字节)
    syscall

    ; 读取用户输入到缓冲区
    li $v0, 4003       # read系统调用编号
    li $a0, 0          # 读取来源为STDIN
    la $a1, input_buf  # 加载存储输入的缓冲区地址
    li $a2, 4          # 最多读取4字节数据
    syscall

    ; 打印输出提示信息
    li $v0, 4004
    li $a0, 1
    la $a1, out
    li $a2, 17         # "Your number is: \n"共17字节
    syscall

    ; 输出用户输入的内容
    li $v0, 4004
    li $a0, 1
    la $a1, input_buf
    li $a2, 4          # 输出缓冲区中的4字节内容
    syscall

    ; 退出程序
    li $v0, 4001       # exit系统调用编号
    li $a0, 0          # 正常退出码0
    syscall

.data

msg: .asciz "Input Number: \n"
out: .asciz "Your number is: \n"
input_buf: .space 4   # 定义4字节的内存缓冲区,用于存储输入数据

关键要点说明

  1. 缓冲区定义:在.data段通过.space 4申请一块4字节的内存区域input_buf,专门用来存放读取到的输入字符。
  2. read系统调用参数:$a1必须传入缓冲区的内存地址(用la $a1, input_buf加载),系统调用会将读取到的字节写入该区域。
  3. 返回值差异:MIPS_o32的read系统调用会在$v0中返回实际读取的字节数,而非输入的内容。你之前看到的视频可能使用的是MARS模拟器的伪系统调用(比如syscall 5读取整数,返回值存在$v0),与o32标准系统调用逻辑不同。

额外提示

  • 如果需要将读取到的ASCII字符转换为整数数值,需要自行实现字符串转整数的逻辑,因为read仅存储原始输入字符。
  • 可重点查阅你手中的MIPS32快速参考手册,熟悉系统调用的参数、返回值定义,以及lb/sb、lw/sw等内存操作指令。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 01:15:33