syscall 14
потребности: "$ a0 = дескриптор файла, $ a1 = буфер, $ a2 = длина"
Чтобы получить дескриптор файла вашего файла, придется открыть его для чтения, используя syscall 13
"$ a0 = адрес нулем строку, содержащую имя файла $ a1 = a2 флаги $ = режим"
Service 13 - MARS реализации три значения флага: 0 для чтения, 1 для записи только с create и 9 для записи только с созданием и добавлением. Он игнорирует режим. Возвращаемый дескриптор файла будет отрицательным, если операция завершилась неудачно. В основной реализации ввода-вывода файла используется java.io.FileInputStream.read() для чтения и java.io.FileOutputStream.write() для записи. MARS поддерживает файловые дескрипторы внутри и выделяет их, начиная с 3. Файловые дескрипторы 0, 1 и 2 всегда открыты для: чтения со стандартного ввода, записи на стандартный вывод и записи на стандартную ошибку соответственно (новый в версии 4.3).
В этой документации также есть пример.
Нет службы для получения информации о файле (например, длина), поэтому вам нужно будет прочитать файл либо как поток, либо обработать его, либо выделить достаточно большой буфер для чтения всех ваших файлов pgm за один раз. 64x64 - 4096 байт (если используется 8-битная шкала серого), так что вашего буфера будет недостаточно, pgm-файл также имеет заголовок.
syscall 16 - это близкий файл (не забудьте называть его после прочтения).
Но, к сожалению, я не нашел никакой информации о правильном Синтаксисе программы, использующей эту функцию, для чтения изображения с определенным размером (64x64 пикселя).
Э ... вы просто читать, как первые 2000 байт в буфер (который должен охватывать любой заголовок), то вы синтаксический анализ этих данных, извлечение значения ширины/Heigh/maxcolor и обнаружение начала пиксельных данных.
Затем вы отправляете остальную часть 2000 байтов в виде пиксельных данных (вы можете использовать syscall 9 для динамического выделения требуемой памяти для данных пикселя или просто создать другой буфер pixels: .space 4096
, если вы точно знаете, что входной сигнал имеет 64x64 8-битный оттенок серого) их в окончательный буфер пикселов, а затем вы снова читаете столько байтов, сколько у вас доступно в буфере чтения-файла, и копируйте дополнительные пиксели ... пока не будут прочитаны пиксели высоты ширины x.
Затем закройте файл.
Звучит очень просто для меня, не вижу, где ваша проблема. Может быть, покажу несколько примеров, с чем вы столкнулись, чтобы показать, что для вас проблематично, но целая сборка - это как перемещение чисел здесь и там, не так много, чтобы делать, пока вы можете сформулировать все свои задачи как алгоритм перемещения номера здесь и там, вы в порядке.
В чем вопрос? Что вы пробовали и каков ваш код? – tambre
мой код, ГНФАР, выглядит следующим образом: # # load_img # .data буфер: \t \t .space 4096 .text главная: \t \t \t \t ла $ a0, буфер \t # загрузка места укуса в буфер \t \t \t li \t \t $ a1, 4096 \t # выделить укусить пространство для строки \t \t \t движение \t $ к, $ a0 \t # сохранить строку в $ t0 \t \t \t литий \t $ v0, 13 \t \t \t системный вызов младший $ ра – Mahakala108
То, что я не могу понять, , как сообщить программе адрес файла, который он должен прочитать. Как я уже сказал, этот файл находится на моем жестком диске ... – Mahakala108