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操作系统.
谢谢.
我敢肯定,.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中编译.
当然,你必须做同样的事情在link和assemble/link菜单项为好.但是,既然你知道它是如何完成的,那不应该是一个问题.