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

MIPS汇编中如何将字符串字符拆分存入预留的12字节内存?

MIPS汇编:将读取的字符串字符逐字节存入预留空间

首先明确:MIPS的syscall 8(读取字符串)本身就是将每个输入字符以单字节形式连续存储的——每个ASCII字符占1字节,从$a0指向的地址开始依次存放,最后自动追加空终止符\0。

如果你的需求是把读取到的字符串字符转移到你预留的bool空间中(每个字节单独存放一个字符),可以参考以下实现:

.data 
bool: .space 12 # 预留12字节,可存储12个单字节数据(含可选终止符)
other_data: .asciiz "Part of some other data I saved"
guess: .space 10 # 临时存储读取的字符串,最多容纳9个字符+1个终止符

.text
main:
    # 读取字符串到临时缓冲区guess
    li $a1, 10     # 指定读取的最大字符数(含终止符)
    la $a0, guess  
    li $v0, 8      
    syscall

    # 将字符逐字节转移到bool预留空间
    la $t0, guess   # 源地址:临时字符串起始
    la $t1, bool    # 目标地址:预留空间起始
    li $t2, 0       # 循环计数器,控制最多转移11个字符(留1字节给终止符)

transfer_loop:
    lb $t3, ($t0)   # 从源地址读取1字节字符
    beq $t3, '\0', transfer_end # 遇到终止符,结束转移
    sb $t3, ($t1)   # 将字符写入目标地址的1字节空间
    addi $t0, $t0, 1 # 源地址指针+1
    addi $t1, $t1, 1 # 目标地址指针+1
    addi $t2, $t2, 1 # 计数器+1
    blt $t2, 11, transfer_loop # 未达上限则继续循环

transfer_end:
    sb '\0', ($t1)  # 可选:在预留空间末尾添加终止符,维持字符串格式

    # 后续业务逻辑...
    li $v0, 10      # 程序退出
    syscall

关键说明

  • lb:从内存读取1字节数据(ASCII字符为正,带符号读取不影响结果)
  • sb:将1字节数据写入内存,完美实现“每个字符存单独字节”的需求
  • 循环限制为11个字符:因为bool预留了12字节,留1字节存放终止符可避免内存溢出;若不需要终止符,可将循环条件改为blt $t2, 12, transfer_loop,并去掉末尾添加终止符的代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 01:16:23