2016-09-30 2 views
0

Also ich benutze MIPS versuchen, in mehreren Strings, die von einem Benutzer eingegeben werden und dann drucken, aber ich bekomme nicht das Verhalten, das ich erwarte.Lesen und Drucken Benutzer eingegeben MIPS Array

Ich möchte 4 Bytes Benutzereingabe (4 Zeichen im Wesentlichen). In meiner Schleife verwende ich den Buchstaben "D" als Signal zum Beenden. Das Problem ist, egal was ich eingib, wenn ich versuche, die erste Eingabe später (oder sogar die zweite oder die dritte) zu drucken, alles was ich ausgedruckt bekomme, ist der Buchstabe 'D', der zum Beenden benutzt wurde (was sollte sei der letzte Wert des Arrays nein?).

.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 

Ich habe meine Eingabe überprüft, wie es kommt und auch wenn im Array nach dem Speichern. Es scheint, mein Druck ist das Problem, aber ich könnte leicht falsch liegen. Irgendwelche Ideen?

+0

programmieren Sie in einem Texteditor oder einer IDE? – jgr208

+0

Programmierung wird in Mars gemacht. Guter Punkt, tut mir Leid, dass ich das vergessen habe. – AKon

+0

ja manchmal kann es die IDE sein und Sie können auch eine IDE verwenden, um die Register zu betrachten, die ich denke, um zu sehen, ob die Daten gespeichert werden oder wenn Ihre Logik durcheinander ist. – jgr208

Antwort

0

Die Lösung war ziemlich einfach. Anstatt die Benutzereingabe in einen separaten Speicherort zu speichern und diesen Speicherort dann in meinem Array zu speichern, ließ ich die Benutzereingabe einfach direkt in meinem Array speichern. Siehe Codeänderungen unten.

.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