2016-09-30 94 views
0

因此,我正在使用MIPS尝试读取由用户输入的几个字符串,然后打印它们,但我没有得到我期望的行为。阅读和打印用户输入MIPS阵列

我想采取4个字节的用户输入(本质上4个字符)。在我的循环中,我使用字母'D'作为退出信号。问题是,无论我输入什么内容,当我尝试打印第一个输入(甚至第二个或第三个)时,我打印的所有字母都是用于退出的字母'D'(应该是是否是数组的最后一个值?)。

.data 
mem: .space 256 #256 bytes of space for input 
inst .space 5 
.text 

la $s1, mem #s1 used to take input 
la $s2, 0($s1) #Pointer to base address of memory 

jal readLoop #Read input loop 

lw $a0, 0($s2) #Attempt to read very first saved input 
li $v0, 4 
syscall 

li $v0, 10 #End program 
syscall 

readLoop: 

li $v0, 8 #read string 
la $a0, inst #location of input memory 
addi $a1, $zero, 5 #length of buffer 
syscall 

lb $t2,($a0) #used to exit loop 

sw $a0, 0($s1) #store input into memory 
addi $s1, $s1, 4 #increment memory by 4 bytes 

li $t1, 'D' 
bne $t2, $t1, readLoop #exit loop on input of a 'D' 

jr $ra 

我检查了我的输入,因为它进来,甚至当保存后在数组中。看来我的印刷品是问题,但我可能很容易出错。有任何想法吗?

+0

你是在文本编辑器或ide编程? – jgr208

+0

编程正在火星中完成。好点,遗憾的是忘记了。 – AKon

+0

有时它可以是IDE,也可以使用IDE来查看寄存器,我认为这些寄存器是用于存储数据还是逻辑混乱。 – jgr208

回答

0

修复相当简单。不是将用户输入存储到单独的内存位置,然后将该位置放入我的数组中,我只是将用户输入直接存储到我的数组中。查看下面的代码更改。

.data 
mem: .space 256 #256 bytes of space for input 
.text 

la $s1, mem #s1 used to take input 

jal readLoop #Read input loop 

la $a0, mem #Attempt to read very first saved input 
li $v0, 4 
syscall 

li $v0, 10 #End program 
syscall 

readLoop: 

li $v0, 8 #read string 
la $a0, mem #set user input as memory location 
addi $a1, $zero, 5 #length of buffer 
syscall 

lb $t2,($a0) #used to exit loop 

addi $s1, $s1, 4 #increment memory by 4 bytes 

li $t1, 'D' 
bne $t2, $t1, readLoop #exit loop on input of a 'D' 

jr $ra