2017-01-08 7 views
-1

私は今からコンピュータを勉強しています。私の仕事はMIPSアセンブラでqtSPIMを使ってプログラミングする方法です。MIPS-Assemblerのsyscall 13の使用

私が今作業している作業は、ハードドライブからピクチャ(PGM 5、バイナリ)をアレイにロードするルーチンとしてプログラムを作成することです。 pitureの始まりには幅、長さ、色深度、collorの量を含むヘッダーもあります。

私が知る限り、私はこれを行うにはシステム14を使用しなければなりません。この関数の引数は、 "$ a0 =ファイル記述子、$ a1 =バッファ、$ a2 =長さ"です。しかし、残念ながら、この関数を使って特定のサイズ(64x64ピクセル)の画像を読み取るプログラムの正しい構文に関する情報は見つかりませんでした。

誰もがこの仕事を解決するのを助けることができれば、私は非常にうれしく思います。事前に

おかげで、

マイク

+0

何が質問ですか?あなたは何を試しましたか、これまでのあなたのコードは何ですか? – tambre

+0

MYコードは、SOFAR、次のようになります。 # #のload_img # .dataの バッファ:\t \t .SPACE 4096 をメイン の.text:\t \tラ\t \t $ A0、バッファ\tバッファにバッファスペースをロードする \t \t \tl\t \t $ a1、4096 \t#割り当てる文字列 \t \t \t移動\t $のための一口スペース、$ A0 \t#に私は理解できない何$ t0の \t \t \tリー\t $ V0、13 \t \t \tシステムコール JR $ RA – Mahakala108

+0

に文字列を保存していますどのようにプログラムに読み込まなければならないファイルのアドレスを伝えるか。私がすでに言ったように、このファイルは私のハードドライブにあります... – Mahakala108

答えて

1

syscall 14ニーズ: "$のA0 =ファイルディスクリプタ、$ A1 =バッファ、$ a2の=長さ"

ファイルのファイルディスクリプタを取得するには、あなたMARS実装サービス - 13

syscall 13 "ファイル名の$ A1 =フラグの$ A2 =モードを含む、NULLで終了する文字列の$ A0 =アドレス" を使用して、読み取りのためにそれを開く必要があります3つのフラグ値:読み取り専用の場合は0、作成の場合は書き込み専用の場合は1、createおよびappendの場合は書き込み専用です。モードを無視します。操作が失敗した場合、返されるファイル記述子は負の値になります。基礎となるファイルI/O実装は、java.io.FileInputStream.read()を使用して読み込み、java.io.FileOutputStream.write()を使用して書き込みます。 MARSはファイルディスクリプタを内部的に管理し、3から始まるファイルディスクリプタを割り当てます。ファイルディスクリプタ0,1および2は、それぞれ標準入力からの読み取り、標準出力への書き込み、および標準エラーへの書き込みのために常に開かれています(リリース4.3で追加)。

このドキュメントにも例があります。

ファイル情報(長さなど)を取得するサービスはありません。そのため、ファイルをストリームとして読み込んで処理したり、一度にすべてのpgmファイルを読み込むのに十分なバッファを割り当てる必要があります。 64x64は4096バイト(8ビットのグレースケールが使用されている場合)なので、あなたのバッファが十分でないように、pgmファイルもヘッダーを持ちます。

syscall 16はクローズファイルです(読んだ後にファイルを呼び出すことを忘れないでください)。

しかし、私は残念ながら、特定のサイズ(64×64ピクセル)で画像を読み取るために、この機能を使用して、プログラムの右構文に関する情報を見つけることができませんでした。

ええと単に(すなわち、任意のヘッダをカバーしなければならない)バッファに最初の2000バイトのように読み取り、その後、幅/ heigh/maxcolorの値を抽出し、それらのデータを解析し、画素データの開始を検出します。

次に、残りの2000バイトをピクセルデータとして処理します(syscall 9を使用してピクセルデータに必要なメモリを動的に割り当てるか、または入力が64x64 8ビットのグレースケールであることがわかっている場合は別のpixels: .space 4096バッファを作成します)それらを最終的なピクセルバッファに変換し、次に、読み込みファイルバッファで利用可能なバイト数を再度読み込み、幅x高さのピクセルが読み込まれるまでピクセルをコピーします。

ファイルを閉じます。

私にとっては非常に簡単ですが、どこに問題があるのか​​わかりません。多分あなたに何が問題なのかを示すために何が来たのでしょうか?アセンブリ全体は、あちこちで数字を動かすようなものです。それ以外のことはあまりありません。あなたが動くアルゴリズムとしてすべてのタスクを定式化できる限り数字はあちこちに、あなたは大丈夫です。

関連する問題