2

私は現在、アセンブリ プロジェクト (MASM と Dosbox の組み合わせ) に取り組んでおり、基本的に教育目的でポンを再作成しています。スプライト (バイト配列) をビデオ メモリ (モード 13h) に描画する関数を書きましたが、これらのスプライトはファイルの上半分を乱雑にし始めています (これらのスプライトは非常に大きくなる可能性があり、私はこれらの大きなビットマップからの描画と比較したバイト配列)

インクルードがどのように機能するかはよくわかりませんが (これが一種の問題です)、一般的な構文を示すファイルを見つけました。たとえば、「DERP.ASM」ファイルと組み合わせて「DERP.INC」を作成できます。この ASM ファイルは、次のようにして INC ファイルにエクスポートできる変数 (db 値) "horse" を定義します。

externdef horse:BYTE

これをASMファイルに入れます:

PUBLIC horse

INC ファイルでは、馬のサイズが 1 バイトであることを明示しています。現在、スプライトは次のように定義されています。

sprite db 1, 0, 0
       db 0, 1, 0
       db 0, 0, 1 

バイト配列全体をエクスポートするにはどうすればよいですか?

4

1 に答える 1

1

必要がない。spriteあるアドレスにマップされる単なる名前です。そのアドレスから始まる何バイトが同じデータの一部を構成するかは、あなた次第です。一般的な方法の 1 つは、次のようなものです。

sprite db 1, 0, 0
       db 0, 1, 0
       db 0, 0, 1 

sprite_len = $ - sprite

他のファイルからアクセスできるように名前を公開しても、実際には状況は変わりません。あなたはまだ名前を公開しているだけです。長さを追跡したい場合は、長さに付けた名前を公開することもできます。ただし、実際には多かれ少なかれデータをエクスポートするわけではありません-スプライトが常に9バイトの長さであることを受信者がすでに知っている場合、同じコードのように、開始アドレスのみに基づいて動作しますファイルでしょう。スプライトの長さを指定するものを何も定義していないという事実は、コードが固定長であることに依存していることを示している傾向があります。その場合、エクスポートspriteするだけで問題なく動作します。

結論:基本的に、コードpublicexterndefデータ宣言が同じファイルにあるかのようにします。シンボルを「エクスポート」しても、同じファイルにある場合よりもそのシンボルに関する情報が受信コードに自動的に提供されるわけではないため、データ宣言が直接表示されます。

于 2012-12-08T21:03:40.940 に答える