You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MASM中EXTERN伪指令的使用方法及DOSBox下编译报错问题咨询

解决MASM编译错误及DOSBox下的正确编译链接流程

首先,你遇到的"Expected: instruction or directive"错误,核心原因是老版本DOS MASM(比如常用的MASM 5.10)不支持EXTERN伪指令,它使用的是EXTRN,而且语法要求明确声明外部符号的类型。

1. 修正代码中的错误

打开main.asm,把原来的EXTERN atoi替换成:

EXTRN atoi:PROC

这告诉MASM,atoi是一个外部过程(PROC),符合老版本MASM的语法要求。

另外,atoi.asm中的end不需要指定入口点,保持end即可(因为它是一个被调用的模块,主入口在main.asm的end main)。

2. DOSBox下完整的编译链接步骤

假设你的MASM.EXE、LINK.EXE和两个源文件都在同一个目录下,按照以下步骤操作:

步骤1:编译atoi.asm生成目标文件

在DOSBox命令行输入:

MASM atoi.asm, atoi.obj, , ;
  • 逗号分隔的参数依次是:源文件、输出目标文件、列表文件(留空)、交叉引用文件(留空)
  • 末尾的分号是为了跳过MASM的交互提示,直接完成编译

步骤2:编译修正后的main.asm生成目标文件

输入:

MASM main.asm, main.obj, , ;

这时候应该不会再出现之前的语法错误了。

步骤3:链接两个目标文件生成可执行文件

输入:

LINK main.obj atoi.obj, main.exe, , ;
  • 第一个参数是要链接的所有目标文件(用空格分隔)
  • 第二个参数是输出的EXE文件名
  • 后面的留空参数对应映射文件和库文件,这里不需要可以省略

步骤4:运行程序

输入:

MAIN.EXE

3. 额外注意事项

  • 确保c:\mylib.lby文件存在且路径正确,如果文件在当前目录,可以改成include mylib.lby避免路径问题
  • 检查atoi.asm中的代码逻辑,比如mov si, 2[bp]是正确的(从栈中获取参数),但要确保调用atoi前栈上的参数是正确的
  • 如果使用的是MASM 6.x版本,EXTERN是支持的,但语法同样需要指定类型(EXTERN atoi:PROC),不过DOS下常用的还是MASM 5.x,所以用EXTRN兼容性更好

内容的提问来源于stack exchange,提问作者Mahek Shamsukha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 19:52:39