Ваш код правильный. Однако, согласно спецификациям системного вызова MARS , при выдаче системного вызова для открытия файла, если $ v0 получает отрицательное значение, это означает, что при открытии файла возникла проблема.
Вы можете проверьте это, собрав код в MARS, установив точку останова на
move $ s0, $ v0
и проверив содержимое $ s0 после эта строка выполняется (или, в качестве альтернативы, выведите $ s0 как целое число, используя syscall 1 в $ v0).
Если это отрицательно, (скорее всего, в вашем случае?) - это означает, что файл не может быть открыт процесс JAVA, который является MARS.
Приведенная выше ссылка также говорит: «Базовая реализация файлового ввода-вывода использует java .io.FileInputStream.read () для чтения и java .io. FileOutputStream.write () для записи. "
Обратите внимание, что вы пытаетесь открыть относительный путь "ndredints.bin" (относительно домашнего каталога процесса MARS Java). Следовательно, JAVA процесс MARS должен запускаться из того же каталога, что и ваш код и файл, который вы пытаетесь открыть.
Вы можете сделать это, введя в ваш следующий код каталог кодов и файлов (MA C или Linux, при условии, что java установлено!) -
java -jar Mars.jar
(или эквивалентное расположение в Windows).
Проверка, является ли дом процесса MARS JAVA действительно домом вашего кода -
Просто «откройте» файл в MARS. Он должен прямо показывать содержимое вашего каталога. :)
Я проверял это в Ubuntu. Надеюсь, это поможет!