非常に大きな.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の後のリビジョンで修正された既知の制限であるかどうかはわかりません。
「インクルード」に最適です。すべての共通の 'equ 'を自分のファイルに移動します。 –
@Davidそれはそれに答える。私は 'include'を完全に忘れてしまった。 –
あなたのコードを少し再編成する方法があるかもしれないので、コードのすべての部分が表示座標/サイズなどを理解する必要はありませんが、出力関連の関数しか表示されません(いくつかの定数同時にいくつかの "モジュール"に必要となりますので、インクルードが必要です) – Ped7g