2017-08-25 18 views
0

非常に大きな.ASMファイルをいくつかの外部ライブラリに分割しようとしていますが、main.asmにメインプログラムのみを残しています。MASM 5.10の式で外部EQUを使用する方法

これはゲームですので、私はinput.asmに私のキーボード入力コードを分割することを望んで、そして私のアドリブサウンドカードのコードされたmusic.asmなどにとにかく

、私の特定の問題は、というのが私の多くであります手続きには式の中でEQUを使うような行があります。

mov ax, ((scrWidth*YCoord)+XCoord) 

これらの行を含むプロシージャを外部ライブラリに移動し、その外部ライブラリをアセンブルしようとすると、MASMは次のエラーを表示します。

A2032: Illegal use of external 

エラーは私にとって意味があります。外部にあるので、アセンブラはscrWidth、YCoord、またはXCoordが何であるかを直接知っていないので、それらを一緒に追加したり乗算したりすることはできません。私はそれが実際にobjファイルを生成することができない理由だと思います。

ここでは、2つの完全なサンプルファイルを示します。

明main.asm

TheStack SEGMENT STACK 

    DB 64 DUP ('THESTACK') 

TheStack ENDS 





VarData SEGMENT PUBLIC 

PUBLIC const1,const2 

    const1 EQU 1 
    const2 EQU 2 

VarData ENDS 





EXTRN Proc1:PROC 
Code SEGMENT PUBLIC 

    assume cs:Code,ds:VarData 

MAIN PROC 

START: 

    mov ax, VarData ;load DS 
    mov ds, ax 

    call Proc1  ;call external procedure 

    mov ah,4ch  ;exit to dos 
    mov al,0 
    int 21h 


Main ENDP 

Code ENDS 

    END Start 

私はUTIL.ASMにインポート、その後、代わりに定数の変数に明main.asmでEQU年代を変更することで回避策を試みた

VarData SEGMENT PUBLIC 

EXTRN const1:ABS,const2:ABS 

VarData ENDS 



Code SEGMENT PUBLIC 

PUBLIC Proc1 

    assume cs:Code,ds:VarData 


Proc1 PROC 

    mov ax, (const1*const2) ;this generates the error 
    ret 

Proc1 ENDP 


Code ENDS 

    END 

UTIL.ASM実際のバイト数です。そこからUtil.ASMのEQUにマッピングしてみましたが、エラーは同じです。

誰かが回避策を知っていますか?私はこれが非常に時代遅れのアセンブラだと知っていますが、これがMASMの後のリビジョンで修正された既知の制限であるかどうかはわかりません。

+4

「インクルード」に最適です。すべての共通の 'equ 'を自分のファイルに移動します。 –

+0

@Davidそれはそれに答える。私は 'include'を完全に忘れてしまった。 –

+0

あなたのコードを少し再編成する方法があるかもしれないので、コードのすべての部分が表示座標/サイズなどを理解する必要はありませんが、出力関連の関数しか表示されません(いくつかの定数同時にいくつかの "モジュール"に必要となりますので、インクルードが必要です) – Ped7g

答えて

1

「アンサー」に移動すると閉じられます。

masmは高水準言語と同様に、ファイルincludeをサポートしています。

Ped7gには、定義の範囲を示す「良いプログラミングテクニック」があります。たとえば、サウンド関連の定義は、 'music.asm'ファイルの上部にあり、ビデオ関連の定義は 'display.asm'ファイルの上部にあります。

しかし、いくつかの定義がより一般的に適用されます。これらはEQUs、EXTERNs、MACROs、STRUCTsなどです。これらのために、複数のファイルに含まれる一般的な 'common.inc'を持つことができます。

+0

解決済み、ありがとうございます。私は、MASM 5.0プログラマーズガイドのpdfを発見しました。そこには多くの有益な情報があります。私は5.1のために1つを見つけることができませんでしたが、5.0のすべてがまだ適用されているようです。 –