Чтение файлов со сборкой MIPS

Я пытаюсь написать программу, которая считывает символы из файла .dat, которые соответствуют разным цветам, отображаемым в симуляторе светодиодов; x = выкл., R = красный и т. д. Моя проблема в том, что я не могу понять, что я делаю неправильно при открытии файла .dat. Я огляделся и перепробовал все, что мог придумать, но каждый раз, когда я собираю и запускаю, я получаю -1 в $v0, что означает ошибку. Вот мой код для открытия/чтения/закрытия файла:

.data  
fin: .asciiz "maze1.dat"      # filename for input
buffer: .asciiz ""

.text
#open a file for writing
li   $v0, 13       # system call for open file
la   $a0, fin      # board file name
li   $a1, 0        # Open for reading
li   $a2, 0
syscall            # open a file (file descriptor returned in $v0)
move $s6, $v0      # save the file descriptor 

#read from file
li   $v0, 14       # system call for read from file
move $a0, $s6      # file descriptor 
la   $a1, buffer   # address of buffer to which to read
li   $a2, 1024     # hardcoded buffer length
syscall            # read from file

# Close the file 
li   $v0, 16       # system call for close file
move $a0, $s6      # file descriptor to close
syscall            # close file

Файл maze1.dat находится в том же каталоге, что и программа MIPS. Любая помощь или предложения приветствуются.


person CJ McAllister    schedule 10.11.2010    source источник
comment
#open a file for writing на самом деле должно быть #open a file for reading   -  person ggorlen    schedule 02.12.2020


Ответы (3)


Единственная проблема заключается в том, что ваш буфер представляет собой просто пустую строку, которая резервирует только один байт (нулевой байт). Вместо этого вы должны использовать buffer: .space 1024 или столько байтов, сколько вам нужно. Все остальное кажется в порядке.

Если у вас возникли проблемы с открытием файла, убедитесь, что расширение указано правильно. Но мой тест только что работал с файлом .dat и несколькими случайными текстовыми файлами.

person Kizaru    schedule 11.11.2010

Убедитесь, что вы запускаете MARS из того же каталога, в котором находится файл. Просто переместите MARS .jar в каталог, содержащий «maze1.dat», и запустите его оттуда.

person David Zaragoza    schedule 29.01.2015

У меня такая же проблема. Если вы используете Linux, попробуйте вместо этого "./maze1.dat".

person user3625166    schedule 29.01.2016