2017-01-08 19 views
-1

Я изучаю компьютер, так как моя задача на данный момент состоит в том, чтобы узнать, как программировать на MIPS-ассемблере, используя qtSPIM.Использование syscall 13 в MIPS-Assembler

Задача, с которой я работаю в данный момент, заключается в написании программы в качестве подпрограммы для загрузки изображения (PGM 5, двоичный) с моего жесткого диска в массив. В начале piture есть также заголовок, который содержит ширину, длину, глубину цвета и количество колёс.

Насколько я понял, я должен использовать syscall 14 для этого. Аргументами этой функции являются «$ a0 = файловый дескриптор, $ a1 = buffer, $ a2 = length». Но я, к сожалению, не нашел никакой информации о правильном Синтаксисе программы, используя эту функцию, чтобы прочитать изображение с определенным размером (64x64 пикселя).

Я был бы очень рад благодарному, если бы кто-нибудь мог помочь мне решить эту задачу.

Спасибо заранее,

Mic

+0

В чем вопрос? Что вы пробовали и каков ваш код? – tambre

+0

мой код, ГНФАР, выглядит следующим образом: # # 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

+0

То, что я не могу понять, , как сообщить программе адрес файла, который он должен прочитать. Как я уже сказал, этот файл находится на моем жестком диске ... – Mahakala108

ответ

1

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.

Затем закройте файл.

Звучит очень просто для меня, не вижу, где ваша проблема. Может быть, покажу несколько примеров, с чем вы столкнулись, чтобы показать, что для вас проблематично, но целая сборка - это как перемещение чисел здесь и там, не так много, чтобы делать, пока вы можете сформулировать все свои задачи как алгоритм перемещения номера здесь и там, вы в порядке.

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

  • Нет связанных вопросов^_^