1

MASM32 アセンブラに問題があります

次のコードは、MASM32 チュートリアルからコピーした Hello World の例です。

.model small
.stack
.data
    message   db "Hello world!", "$"
.code

_main   proc

    mov   ax,seg message
    mov   ds,ax

    mov   ah,09
    lea   dx,message
    int   21h

    mov   ax,4c00h
    int   21h

_main   endp
end _main

アセンブルしようとすると、MASM32 は次のコメントとともに A2004 エラーをスローします。

C:\masm32\console.asm(11): エラー A2004: シンボル タイプの競合

誰でもそれで私を助けることができますか?このコードは TASM アセンブラーでは問題なく動作しましたが、今は MASM32 を使用する必要があり、以前に TASM で動作することが証明されたアセンブリ コードでこの A2004 エラーが発生しています。

これが関連する場合、私は Win7 OS を実行している 32 ビット CPU を持っています。

ありがとう。

4

2 に答える 2

9

x86 アーキテクチャが本当に (64K のチャンクに) セグメント化されていた初期のアーティファクトである.model smallと確信しています。seg

masm32IDE はそれらをまったく好まない (最近では 32 ビットのフラット モデル コードを実行することがはるかに一般的になっているため、予想外ではありません) 。

問題は、bin\assmbl.batファイルをアセンブルするためにエディターがファイルを使用しており、次の行が含まれているという事実にあります。

\masm32\bin\ml /c /coff %1.asm > \masm32\bin\asmbl.txt

/coffオプションで)。これがアセンブラに文句を言わせる原因です。

コマンドラインに戻すことで動作させることができます。ファイルが であると仮定してtst.asm、次のコマンドを使用します。

c:\masm32\bin\ml.exe /c tst.asm
c:\masm32\bin\link16 tst.obj.tst.exe,,,,

正常に動作する が得られますtst.exe


次のトランスクリプトは、これが機能することを示しています。

C:\masm32> type tst.asm
.model small
.stack
.data
    message   db "Hello world!", "$"
.code

_main   proc

    mov   ax,seg message
    mov   ds,ax

    mov   ah,09
    lea   dx,message
    int   21h

    mov   ax,4c00h
    int   21h

_main   endp
end _main

 

C:\masm32> bin\ml.exe /c tst.asm
Microsoft (R) Macro Assembler Version 6.14.8444
Copyright (C) Microsoft Corp 1981-1997.  All rights reserved.

 Assembling: tst.asm

 

C:\masm32> bin\link16 tst.obj,tst.exe,,,,

Microsoft (R) Segmented Executable Linker  Version 5.60.339 Dec  5 1994
Copyright (C) Microsoft Corp 1984-1993.  All rights reserved.

 

C:\masm32> tst.exe
Hello world!

あるいは、エディターは非常に構成可能です。編集用にファイルを開いてmenus.ini(最初にバックアップしてください。そのことを説明する必要はありません)、次のように変更します。

&Assemble ASM file,\MASM32\BIN\Assmbl.bat "{b}"

に:

&Assemble ASM file,\MASM32\BIN\Assmbl.bat "{b}"
Assemble ASM file (no COFF),\MASM32\BIN\Assmbl2.bat "{b}"

IDE の再起動時に新しいメニュー項目を追加できます。

また、後者にコピーbin\assmbl.batbin\assmbl2.batて削除する必要があります。/coff

次に、新しいメニュー オプションを使用して、IDE 内から正常にコンパイルできます。

もちろん、linkassemble/linkメニュー項目についても同じことを行う必要があります。しかし、それがどのように行われるかがわかったので、問題は発生しません。

于 2010-09-20T01:00:26.230 に答える
0

MASMを使用してからしばらく経ちましたが、「メッセージ」は予約語ではありませんか?'_message'を試してください。

于 2010-09-20T00:01:03.220 に答える