如何用MASM32的ml.exe将asm转exe?遇重定位错误求助
解决MASM32 ml.exe编译16位DOS程序的重定位错误问题
你的代码是16位DOS程序,但MASM32的ml.exe默认编译32位PE格式程序,这是导致重定位错误的核心原因。以下是正确的编译链接步骤:
1. 编译为16位兼容的目标文件
在MASM32内置终端中切换到汇编文件所在目录,执行命令:
ml /c /omf hello.asm
/c:仅编译不链接,生成目标文件(hello.obj)/omf:生成16位程序兼容的OMF格式目标文件(默认是32位COFF格式,不适配DOS程序)
2. 链接为DOS可执行文件
使用MASM32自带的link16.exe链接目标文件,命令:
link16 hello.obj;
- 末尾的分号
;是关键,它告诉链接器直接使用默认设置(输出文件名同目标文件、无需额外库文件),跳过交互提示。
关键说明
- MASM32工具包确实没有
masm.exe(老式16位汇编器),但ml.exe配合link16.exe完全可以生成16位DOS程序。 - 你的汇编代码本身无问题,适配DOS的
small内存模型和int 21h中断调用,生成的hello.exe需在DOSBox或32位Windows环境下运行(64位Windows不原生支持16位程序)。
内容的提问来源于stack exchange,提问作者Σταύρος Κομοπουλος
相关产品推荐
相关产品推荐

