MIPS代码中双用户输入提示异常:prompt1输出双语句
MIPS输入提示字符串异常输出的解决方法
我在MIPS代码中尝试为变量a和b获取输入,定义了prompt1和prompt2两个字符串作为输入提示。运行代码时,prompt1对应的系统调用会同时输出两条提示语句,但prompt2仅输出自身的提示,我需要让prompt1也能像prompt2一样正常输出。
原代码
.data prompt1: .ascii "\nPlease enter input for a: " prompt2: .ascii "\nPlease enter input for b: " main: .text li $v0, 4 la $a0, prompt1 syscall li $v0, 5 syscall move $t0, $v0 li $v0, 4 la $a0, prompt2 syscall li $v0, 5 syscall move $t1, $v0
问题原因
运行时prompt1会连带prompt2的内容一起输出,是因为你使用.ascii定义字符串,这种指令不会自动在字符串末尾添加空终止符\0。MIPS的系统调用4(打印字符串)会持续从内存中读取字符,直到遇到\0才停止,所以prompt1之后的prompt2内容会被一并输出。而prompt2之后没有其他字符串数据,所以输出正常。
解决方法
将定义字符串的.ascii替换为.asciiz,该指令会自动在字符串末尾添加空终止符,让系统调用能正确识别字符串的结束位置:
.data prompt1: .asciiz "\nPlease enter input for a: " prompt2: .asciiz "\nPlease enter input for b: " main: .text li $v0, 4 la $a0, prompt1 syscall li $v0, 5 syscall move $t0, $v0 li $v0, 4 la $a0, prompt2 syscall li $v0, 5 syscall move $t1, $v0
内容的提问来源于stack exchange,提问作者Randolf Gabrielle Uy
相关产品推荐
相关产品推荐

