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

