2014-02-08 4 views
0

Предположим, что я хочу, чтобы вывести ту же строку, я вставил, я хотел бы использовать следующуювыводя та же строка ввода

main: 

la $a0,buffer #allocate space for $a0 

li $v0,8 #read the string input 
syscall 

li $v0, 4 #print the string input 
syscall 

li $v0,10 #stop the program 
syscall 

Ну, это не будет работать, и я должен добавить

li $a1,.. 

и Я не знаю почему?

+0

_ "that wont work" _ Как он не работает? Кроме того, вы упомянули, что вы добавили некоторый код, чтобы попытаться исправить эту проблему, но не то, что _exactly_ было добавлено вами или где вы его добавили. – Michael

ответ

1

См. MARS/spim syscall doc here.

Для syscall 8 вам необходимо указать адрес буфера в $a0 и длину в $a1. Я предполагаю, что код выше не работает, потому что программа начинается с $a1, установленной до нуля, что означает, что вы будете читать в 0 байтах.

Кроме того, ваш комментарий к первой строке неверен. Использование la не выделяет пространство. Это должно быть сделано в сегменте text, где я предполагаю, что метка buffer определена. Использование la загружает только адрес метки buffer в регистр.

+0

Я определил буфер в .data где buffer: .space number. Я думал, что резервное пространство для ввода строк. –

+0

Да. Это верно. Это просто комментарий не соответствует первой строке. –

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