汇编语言多模块程序简述

< 上一页WriteStackFrame过程 EXTERN伪指令下一页 >

大型源文件难于管理且汇编速度慢,可以把单个文件拆分为多个子文件,但是,对其中任何子文件的修改仍需对所有的文件进行整体汇编。更好的方法是把一个程序按模块(module)(汇编单位)分割。每个模块可以单独汇编,因此,对一个模块源代码的修改就只需要重汇编这个模块。

链接器将所有汇编好的模块(OEJ 文件)组合为一个可执行文件的速度是相当快的,链接大量目标模块比汇编同样数量的源代码文件花费的时间要少得多。

新建多模块程序有两种常用方法:
  • 其一是传统方法,使用 EXTERN 伪指令,基本上它在不同的 x86 汇编器之间都可以进行移植。
  • 其二是使用 Microsoft 的高级伪指令 INVOKE 和 PROTO,这能够简化过程调用,并隐藏一些底层细节。

隐藏和导出过程名

默认情况下,MASM 使所有的过程都是 public 属性,即允许它们能被同一程序中任何其他模块调用。使用限定词 PRIVATE 可以覆盖这个属性:

mySub PROC PRIVATE

使过程为 private 属性,可以利用封装原则将过程隐藏在模块中,如果其他模块有相同过程名,就还需避免潜在的重名冲突。

OPTION PROC:PRIVATE 伪指令

在源模块中隐藏过程的另一个方法是,把 OPTION PROC:PRIVATE 伪指令放在文件顶部。则所有的过程都默认为 private,然后用 PUBLIC 伪指令指明那些希望其可见的过程:

OPTION PROC:PRIVATE
PUBLIC mySub

PUBLIC 伪指令用逗号分隔过程名:

PUBLIC sub1, sub2, sub3

或者,也可以单独指定过程为 public 属性:

mySub PROC PUBLIC
.
mySub ENDP

如果程序的启动模块使用了 OPTION PROC:PRIVATE,那么就应该将它(通常为 main)指定为 PUBLIC,否则操作系统加载器无法发现该启动模块。比如:

main PROC PUBLIC

< 上一页WriteStackFrame过程 EXTERN伪指令下一页 >