2017-02-21 14 views
0

Поэтому мне нужно заполнить массив в MIPS 10-дюймовыми «записями», которые состоят из имени, возраста и зарплаты сотрудника. Имя сотрудника не более 40 символов, и оба возраста и зарплаты должны быть целыми числами. Однако при тестировании этого цикла, который я написал, я всегда получаю «недопустимый целочисленный ввод (syscall 5)» для строки 18 после того, как я прохожу через первых 5 сотрудников, и я набираю «Emp6» и нажимаю Enter, и я не могу показаться почему. Любая помощь будет принята с благодарностью!Ошибка при попытке заполнить массив строками и int в MIPS?

Test Input: Код

Emp1 
1 
1 
Emp2 
2 
2 
Emp3 
3 
3 
Emp4 
4 
4 
Emp5 
5 
5 
Emp6 

Ошибка:

Error in line 18: Runtime exception at 0x00400020: invalid integer input (syscall 5) 

Go: execution terminated with errors. 

ответ

1

Ваша главная проблема, кажется, что системный вызов read_string ожидает, что размер буфера в $a1, но вы используете, что для счетчика цикла , Таким образом, вы в конечном итоге исчерпаете место, и во входном буфере будет оставлен необработанный текст, который затем будет считываться последующим read_int и который взрывается.

Дополнительная проблема заключается в том, что вы продолжаете увеличивать $a0, но не учитываете это в своей адресации. Также sw $v0, 0($a0) не имеет большого смысла, строка уже была прочитана в памяти, $v0 ничего интересного не имеет.

Смежные вопросы