2016-09-30 6 views
0

MIPSを使用して、ユーザが入力した複数の文字列を読み込み、印刷しようとしていますが、期待した動作が得られません。ユーザがMIPS配列を読み取って印刷する

4バイトのユーザー入力(本質的に4文字)を取りたいと思っています。私のループでは、文字「D」を終了信号として使用します。問題は、私が入力したものであっても、最初の入力を後で(または2番目または3番目に)印刷しようとすると、出てきた文字「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 
関連する問題