如何在MIPS汇编中读取空格分隔整数?解决换行输入限制
解决MIPS汇编读取空格分隔整数的问题
哦,这个问题其实比你想的简单——MIPS的syscall 5(读取整数)本身就会自动跳过所有前导空白字符,包括空格、制表符和换行符!所以你现有的代码逻辑其实已经能处理空格分隔的输入了,只是可能你没意识到这一点。
举个实际的例子,下面这段代码会循环读取整数,直到你输入-1作为终止信号,期间不管你用空格还是换行分隔输入,它都能正确识别每个整数:
.data prompt: .asciiz "输入若干空格分隔的整数(输入-1结束):\n" space: .asciiz " " exit_msg: .asciiz "\n程序结束!" .text .globl main main: # 打印提示语 li $v0, 4 la $a0, prompt syscall read_loop: # 读取整数(自动跳过空格/换行) li $v0, 5 syscall move $t0, $v0 # 触发终止条件 beq $t0, -1, end_program # 打印当前读取到的整数(演示用) li $v0, 1 move $a0, $t0 syscall li $v0, 4 la $a0, space syscall j read_loop end_program: li $v0, 4 la $a0, exit_msg syscall # 退出程序 li $v0, 10 syscall
运行说明
当你运行这段代码后,直接输入类似15 25 35 45 -1然后回车,程序会依次读取15、25、35、45,直到遇到-1后退出。
额外提示
- 如果你需要读取固定数量的整数(比如3个),只需要把循环改成固定次数即可,比如用一个计数器从3递减到0,每次循环减1,直到计数器为0时退出。
- 如果你是从文件读取输入,这个逻辑同样完全适用,
syscall 5会自动处理文件中的空格和换行分隔符。
内容的提问来源于stack exchange,提问作者Giorgi Tsertsvadze
相关产品推荐
相关产品推荐

