多模块程序结构
一、多模块方法
(1)源文件包含
使用源文件包含伪指令INCLUDE
include 文件名;将指定文件内容插入主体源程序文件
大型源程序可以合理地分放在若干个文本文件中
- 各种常量定义、声明语句等组织在包含文件(*.INC)
- 常用的或有价值的宏定义存放在宏定义文件(*.MAC)
- 常用的子程序形成汇编语言源文件(*.ASM)
- 任何文本文件
源文件包含的使用:
- 被包含文件
►文件名要符合操作系统规范
►只能是文本文件
►内容被插入源文件包含include语句所在的位置 - 实质仍然是一个源程序
►只是分开在若干个文件中
►只需针对主体源程序文件进行汇编、连接
(2)模块连接
;定义标识符的模块使用
public 标识符 [,标识符 …]
;调用标识符的模块使用
extern 标识符:类型 [,标识符:类型 …]
-
子程序单独编写一个源程序文件
►使用共用伪指令PUBLIC和外部伪指令EXTERN声明
►子程序在代码段,与主程序文件采用相同的存储模型
►没有开始执行和结束执行点,但有汇编结束语句
►处理好子程序与主程序之间的参数传递问题 -
子程序源文件汇编形成目标模块OBJ文件
-
连接时输入子程序目标模块文件名
(3)子程序库和库文件包含
1.子程序库
子程序库的概念
- 子程序库是子程序模块的集合,便于统一管理子程序
- 编写存入库文件的子程序
►遵循更加严格的子程序模块要求
►应该遵循一致的规则(以免在使用时造成混乱) - 子程序文件编写完成、汇编形成目标模块
- 利用库管理工具程序把子程序模块加入到子程序库
子程序库的使用
- 子程序单独编写一个源程序文件
- 子程序源文件汇编形成目标模块OBJ文件
- 利用库管理工具把子程序模块加入到子程序库
- 在连接主程序时提供子程序库文件名
2.库文件包含
使用库文件包含伪指令INCLUDELIB
includelib 文件名
;使用库文件中的子程序
二、宏汇编
(1)宏汇编的定义
- 宏(Macro)是具有宏名的一段汇编语句序列
- 宏需要先使用MACRO/ENDM伪指令进行定义
- 然后在程序中使用宏名(带参数)进行宏调用
- 源程序进行汇编时,宏名被汇编程序用宏定义的,代码序列替代,实现宏展开
(2)宏定义、宏调用和宏展开
宏定义
宏名 macro [形参表]
… ;宏定义体
endm
宏调用
宏名 [实参表]
宏展开
(3)宏汇编的特点
- 宏需要先定义后使用,且不必在任何段中
►常书写于源程序开始位置
►常用的宏定义可以单独写成一个宏定义文件 - 宏定义中更改了寄存器内容,最好进行保护和恢复
- 宏定义的参数灵活,宏定义允许嵌套和递归调用
- 宏调用不需要控制的转移与返回
►宏调用将相应的语句序列复制到宏指令的位置
►宏展开被嵌入源程序,成为一体