2016-09-30 172 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