A2004 MASM32问题

udu*_*shu 1 assembly masm masm32 x86-16

我有一个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
Run Code Online (Sandbox Code Playgroud)

在尝试汇编时,MASM32抛出A2004错误,并带有以下注释:

C:\masm32\console.asm(11) : error A2004: symbol type conflict

任何人都可以帮助我吗?这段代码与TASM汇编程序完美配合,但现在我必须使用MASM32,而且我之前已经证明可以与TASM一起使用的任何汇编代码都有这个A2004错误.

如果这是相关的,我有一个32位CPU运行Win7操作系统.

谢谢.

pax*_*blo 9

我敢肯定,.model small并且seg是较早时代的文物时,x86架构是真正的分割(成64K块).

masm32IDE并不非常喜欢他们在所有的(并不意外,因为它更普遍时下做32位平面模型代码).

问题在于bin\assmbl.bat编辑器正在使用该文件来汇编文件,它包含以下行:

\masm32\bin\ml /c /coff %1.asm > \masm32\bin\asmbl.txt
Run Code Online (Sandbox Code Playgroud)

(带/coff选项).这就是让汇编程序抱怨的原因.

您可以通过还原到命令行来使其工作.假设您的文件是tst.asm,请使用以下命令:

c:\masm32\bin\ml.exe /c tst.asm
c:\masm32\bin\link16 tst.obj.tst.exe,,,,
Run Code Online (Sandbox Code Playgroud)

而且你会有一个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
Run Code Online (Sandbox Code Playgroud)

 

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
Run Code Online (Sandbox Code Playgroud)

 

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.
Run Code Online (Sandbox Code Playgroud)

 

C:\masm32> tst.exe
Hello world!
Run Code Online (Sandbox Code Playgroud)

或者,编辑器非常易于配置.如果你打开menus.ini文件进行编辑(先备份它,我不需要告诉你)并更改:

&Assemble ASM file,\MASM32\BIN\Assmbl.bat "{b}"
Run Code Online (Sandbox Code Playgroud)

至:

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

您可以在IDE重新启动时添加新的菜单项.

您还需要复制bin\assmbl.bat到后者bin\assmbl2.bat/coff从中删除.

然后,您可以使用新的菜单选项在IDE中编译.

当然,你必须做同样的事情在linkassemble/link菜单项为好.但是,既然你知道它是如何完成的,那不应该是一个问题.