2016-10-30 2 views
0

Ich versuche, ein Assembler-Programm (in MIPS) zu erstellen, das Benutzereingabewerte liest, die durch Zeilenumbrüche getrennt sind. Ich möchte eine Zeichenfolge lesen, die eine Ganzzahl enthält (z. B. "A4", aber stattdessen liest MIPS die Zeichenfolge als "A" und die Ganzzahl als "4". Wie mache ich MIPS lesen Sie die Zeichenfolge als "A4 "mit syscall? Hier ist das Bit von meinem Code, die ich bisher habe, die einen String in einer Zeile lesen sollten, und eine ganze Zahl in der nächsten Zeile.Read MIPS String, wenn String eine Ganzzahl enthält

buffer: .space 2 
.text 
.globl main 
main: 
li $v0, 8 
la $a0, buffer 
li $a1, 2 
syscall 
move $s0, $a0 


li $v0, 5    
syscall 
move $s1, $v0 

Antwort

2

Systemaufruf 8 liest höchstens $a1-1 Zeichen , da die Zeichenfolge immer NULL-terminiert wird, also $a1 auf 2 und dann "A4" eingeben, erhalten Sie die Zeichenfolge "A\0" in buffer. Wenn Sie 2 Zeichen plus NUL-Terminator lesen möchten, setzen Sie stattdessen $a1 auf 3

+0

danke. Das war, was ich zuerst dachte, aber ich war zunächst nicht sicher –

+2

Diese Änderung erfordert auch 'buffer: .space 3' –

+0

jetzt heißt es, dass die Ganzzahl-Eingabe für Syscall 5 ungültig ist, wenn ich die Eingabetaste zum Eingeben der Ganzzahl drücken. –