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高さのピクセルが読み込まれるまでピクセルをコピーします。
ファイルを閉じます。
私にとっては非常に簡単ですが、どこに問題があるのかわかりません。多分あなたに何が問題なのかを示すために何が来たのでしょうか?アセンブリ全体は、あちこちで数字を動かすようなものです。それ以外のことはあまりありません。あなたが動くアルゴリズムとしてすべてのタスクを定式化できる限り数字はあちこちに、あなたは大丈夫です。
何が質問ですか?あなたは何を試しましたか、これまでのあなたのコードは何ですか? – tambre
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
に文字列を保存していますどのようにプログラムに読み込まなければならないファイルのアドレスを伝えるか。私がすでに言ったように、このファイルは私のハードドライブにあります... – Mahakala108