汇编写函数:关于PUBLIC和EXTRN的区别

时间:2022-04-04 11:02:52

  PUBLIC伪指令的格式:PUBLIC 标识符,标识符...

  该伪指令告诉汇编程序放在PUBLIC之后的标识符(本模块的定义的)可为其他模块使用,这些标识符可以是变量、标号或者过程名。言外之意,它不仅可以使本模块对其进行调用,而且其他模块也可以调用。

  EXTRN伪指令格式:EXTRN 类型 (标识符)

  该伪指令告诉汇编程序:EXTRN后面括号中的标识符是由外部程序调用,本程序不调用。

  在开发一个功能较弱的应用程序时,其执行文件通常可由一个目标文件连接而成。当开发一个功能较强、关系较复杂的应用程序时,其执行文件很难由一个目标文件连接而成,常常是由多个目标文件(模块)连接而成的。各模块之间无疑会存在着相互调用、相互访问数据单元等内在联系,各模块之间的相互联系就产生了这样的问题:程序员如何在源程序中来表达这种联系?为了解决描述各模块之间的联系,汇编语言提供了二条伪指令PUBLIC和EXTRN,它们的作用有点象C/C++语言说明变量、过程和函数是“全局的”或“外部的”。 
  这二条伪指令的具体用法和含义如下: 
  1、伪指令PUBLIC 
  伪指令PUBLIC是用来说明:当前模块中哪些标识符是能被其它模块引用的公共标识符。其说明的一般格式如下: PUBLIC 标识符1, 标识符2, …… 
  其中:“标识符”可以是变量名、过程名和程序标号,各标识符之间要用逗号分开。 上面说明语句说明了标识符1、标识符2等是公共标识符,可以被其它模块引用。在一个模块中,可用多条PUBLIC伪指令来说明公共标识符。 
  2、伪指令EXTRN 
  伪指令EXTRN是用来说明:在当前模块所使用的标识符中,哪些标识符是已在其它模块中被定义为指定类型的标识符。如果当前模块使用了其它模块的标识符,而对它又不加以说明的话,那么,在汇编时,汇编程序将会给出下列出错信息: error nnnnn: undefined symbol : XXXXXX 其中:“nnnnn”是错误号,“XXXXXX”是当前模块中没有定义的标识符。 
  伪指令EXTRN的一般说明格式如下: EXTRN 标识符1:类型1, 标识符2:类型2, …… 
  其中:“标识符”和“类型”之间要用冒号“:”连接。 
  上面语句说明了标识符1、标识符2等是外部标识符,它们在其它模块中已被分别定义为类型1、类型2等,该类型说明符可以是:NEAR、FAR、BYTE、WORD、DWORD等之一。如果在一条说明伪指令中说明了多个标识符,那么,各标识符之间要用逗号分开。 
  在一个模块中,可用多条EXTRN伪指令来说明本模块所引用的外部标识符。 
  注意:伪指令EXTRN中所说明的标识符,必须在其定义的模块中被PUBLIC伪指令说明为公共标识符,并且其说明的标识符类型要与该标识符在定义是的类型相一致,否则,要么不能生成其可执行文件,要么其执行文件不能正确运行。