2015-12-02 3 views
0

Как я могу цикл до конца файла без жесткого кодирования значения $ t0Чтение файла посимвольно с использованием MIPS в MARS IDE

 addi $t0, $t0,1000 

loop: beq $t0, $0, loopend 
     #this code reads in a character from the file 
     jal readchar 


#print the character to the console 
     li $v0,11 
     move $a0,$t1 
     syscall 

     addi $t0,$t0,-1 
     j loop 
loopend: 

readchar: li $v0,14 
      move $a0,$s6 
      la $a1,inchar 
      li $a2,1 
      syscall 
      lb $t1,inchar 
      jr $ra 

Потому что, когда я использую $ a2 он не работает, но он говорит, что здесь http://courses.missouristate.edu/kenvollmar/mars/help/syscallhelp.html

что чтение из файла

Li $ v0,14
$ a0 = дескриптор файла

$ a1 = адрес входного буфера

$ a2 = максимальное количество символов для чтения $ v0 содержит количество символов

И когда я использую это в качестве замены для жестких кодированном ($ Адди $ t0 , $ t0,1000) $ a2 еще 0

li $v0,14 
move $t0,$a2 
sycall 

Спасибо!

ответ

1

Я не уверен, какую цель переместил $a2 в $t0до Системный вызов будет служить. $a2 - это аргумент системного вызова, в котором указано максимальное количество символов для чтения. Возвращаемое значение - то есть количество фактически прочитанных символов - доступно только после системного вызова и будет в регистре $v0.

Итак, если вы положили 1 в $a2 перед системным вызовом и $v0 содержит нуль после системного вызова, то вы, вероятно, достигли конца файла.

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