如何修复程序集x86中的“未解决的外部”错误?

时间:2009-10-12 22:49:29

标签: assembly

我有两个文件, 在一个我声明变量SEED:

;file1.asm

.MODEL  SMALL,BASIC
.FARDATA RAND_DATA
SEED       DW      ?

.CODE
;Some code
END

另一方面,我尝试引用变量

;file2.asm

.MODEL  SMALL,BASIC
EXTERNDEF SEED:WORD

FOO PROC  FAR PUBLIC USES DX,DS
    MOV     SEED,DX
FOO ENDP

END

当我尝试使用代码

编译这两个文件时
ml file1.asm file2.asm io.lib

我收到以下错误:

error L2029: 'SEED' : unresolved external

我做错了什么?

谢谢!

1 个答案:

答案 0 :(得分:1)

file1.asm中的SEED应该让PUBLIC被其他模块看到。

这是通过在file1.asm中的某处添加一行

来完成的
       PUBLIC SEED

请注意,根据您使用的汇编程序,可能需要“ global ”。 这样的范围语句可以在文件中的任何位置+/-,但是关于完成此操作的位置有几种样式/约定。两个主要的是:

  • 在文件顶部附近,所有PUBLIC语句都组合在一起
  • 就在每个变量声明之上,例如

其他约定通常是对上述内容的变体,例如,所有公共数据变量都位于文件顶部附近,但procs的公开声明在适用的每个文件的上方完成。