我很确定这是 x86 架构真正被分割(.model small
成seg
64K 块)时的早期产物。
IDE 根本不喜欢它们(这masm32
并不意外,因为现在执行 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.bat
到后者bin\assmbl2.bat
并从中删除/coff
。
然后,您可以在 IDE 中使用新的菜单选项进行正常编译。
当然,您也必须对link
和assemble/link
菜单项做同样的事情。但是,既然您知道它是如何完成的,那应该不存在问题。