资源预览内容
第1页 / 共29页
第2页 / 共29页
第3页 / 共29页
第4页 / 共29页
第5页 / 共29页
第6页 / 共29页
第7页 / 共29页
第8页 / 共29页
第9页 / 共29页
第10页 / 共29页
亲,该文档总共29页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
21世纪高等院校规划教材汇编语言程序设 计 相 伟 主编 徐小平 李珍香 副主编中国水利水电出 版社第十章模块化程序 设计本章学习目标通过本章学习,读者应该掌握以下内容:n模块的概念及设计n模块之间的通信n模块化程序设计方法10.1概述模块化程序设计是大型程序设计的常用方 法,它是指按照要实现的功能把一个大型程序 划分成多个模块,每个模块完成一个子功能, 然后按模块来分配设计人员,由设计人员编制 和调试各个模块程序,最后再把它们按照一定 的调用关系组合起来,完成指定的功能。 从汇编语言源程序的角度来看,一个模块 就是一个以END语句作为结束标志的源程序。模块的划分与设计可参考如下规则: 一个模块既不能过大,也不能过小。过大则 模块的通用性较差,过小则会造成时间和空间 上的浪费。 力求使模块具有通用性, 通用性越强的模 块利用率越高。 各模块间就在功能上、逻辑上相互独立,特 别应避免用转移语句在模块间转来转去。 模块间的接口应该简单,要尽量减少公共符 号的个数,尽量不共用数据存储单元。采用模块化程序设计的优点: 容易把复杂的问题分解成一系列简单问题, 便于解决实际问题。 单个模块容易编写、查错、调试。 单个模块容易重复使用,对一些经典模块可 以编写成标准模块供以后使用。 程序员可以直接利用现有的模块,提高工作 效率。 软件运行之后的维护方便。10.2模块命名与装配在模块化程序设计中,一个程序通常 由一个主模块和一个或多个子模块构成 ,当编写完所有模块的汇编语言源程序 后,宏汇编程序需要对包括主模块在内 的所有模块的源程序进行单独汇编,生 成主模块的目标文件和各个子模块的目 标文件,然后由连接程序将主模块和所 有子模块的目标文件连接在一起构成一 个可执行文件。1模块命名伪指令格式:NAME 模块名 功能:给一个模块命名。通常作为一个 模块的第一条指令。2段定义伪指令段名 SEGMENT 定位属性 组合 属性 类别 段名 ENDS 功能:定义程序中的一个逻辑段,并指 定该逻辑段的属性。 定位属性定位属性是对该段的起始地址所提出的 要求,即告诉连接程序,在将各个段装 配在一起时,前一个段安排完后,下一 个段将从一个什么样的地址开始存放。 定位属性是规定好的,它们是:PARA 、WORD、BYTE、PAGE,分别称为节地 址、字地址、字节地址、页地址。各个定位属性的意义如下 :nPARA节地址。表示该段的存放开始地址是 物理地址的最低4位为0的地址。定位属性省略 时,表示PARA。在前面的例题中,程序中多数 逻辑段的定位属性都被省略,说明采用了PARA 属性。nWORD 字地址。表示该段的存放开始地址是 物理地址的最低1位为0的地址。nBYTE字节地址。表示该段的存放开始地址 可以是任何物理地址。nPAGE页地址。表示该段的存放开始地址是 物理地址的最低8位为0的地址。 组合属性组合属性用于向连接程序提供本段同其 它段在连接时的组合关系。 组合属性也是规定好的,有以下几种属 性供选择,它们是:NONE、PUBLIC、 COMMON、AT表达式、STACK、 MEMORY。各个组合属性的意义如下 :nNONE 表示本段与其它段逻辑上不发生 关连,尽管在物理地址上可能相邻,但 每个段都有自己的段首址,这是隐含的 组合属性,可以省略。在前面学过的例 题中,多采用这种组合属性。nPUBLIC 表示应将本段与其它模块中的同 名、同类别段按各模块连接的顺序相邻 地连接在一起,组成一个物理段,但该 段大小不能超过64K。一般情况下,各个 模块的数据段、代码段都分别定义成同 名、同类别且组合属性为PUBLIC的段, 以便使连接后生成的文件只有一个数据 段、一个代码段。nSTACK 与PUBLIC一样,表示本段与其 它模块中的同名、同类别段按各模块连 接的顺序相邻地连接在一起,组成一个 物理段,该段大小也不能超过64K。但与 PUBLIC不同的是,该段作为堆栈段。一 般情况下,各个模块的堆栈段也都定义 成同名、同类别且组合属性为STACK的 段,以便使连接后生成的文件只有一个 堆栈段。nCOMMON 连接程序为本段和同名、同 类别的其他段指定相同的段地址,即将 本段与这些段相覆盖,段的长度取决于 最长的具有COMMON属性的段的长度。nAT 表达式 连接程序将把本段装在表 达式的值所指定的段地址上。使用这个 组合属性可以很方便地实现在某一固定 存储区(如ROM区或中断向量区)内的 固定偏移地址处定义标号或变量,这样 源程序就能以标号和变量的形式访问这 些固定的存储单元。nMEMORY:连接程序将本段定位在被连 接在一起的其它所有段之上(即安排在 最高地址上)。如果有几个段都选择 MEMORY组合属性,则宏汇编程序将把 遇到的第一段处理为MEMORY段,而其 它段都被处理为COMMON段。 类别属性段名的类别 属性用于连接程序在装配时安 排各个段的存放顺序。它是用单引号括起来的 字符串,该字符串可以包括任何合法的字符。 连接程序在装配时,将把类别相同、段名相 同且组合属性为PUBLIC或STACK的段按连接时 的顺序连续存放,组成一个的物理段,具有相 同的段地址;而仅类别和段名相同的段将按 连接时的顺序连续存放,但仍然是不同的段, 每个段都有自己的段地址。通常为使程序简洁,约定数据段的类 别 属性取名为DATA,附加数据段的类 别 属性取名为EXTRA,堆栈段的类别 属性取名STACK,代码段的类别 属性 取名为CODE。10.3模块通信模块化程序设计是按照程序的功能把 程序划分成多个模块,按模块来编制程 序的。尽管在划分模块时,使模块具有 高的的独立性是划分模块的重要原则, 但要使模块的功能完全独立是很难做到 的,因此模块之间不可避免的要进行通 信,以便在一个模块内访问另一个模块 定义的符号(变量、标号、过程名、符 号常数)。 1局部符号在一个模块内定义且在该模块内访问 的符号称为局部符号,局部符号也称内 部符号。如前面学习的汇编语言源程序 都只有一个模块,也可以称为主模块。 在那些源程序里定义的符号,都是在定 义符号的源程序中访问的,因此它们都 是局部符号。局部符号只要在模块内定 义就可以访问,不需要额外的说明。2公共符号在一个模块内定义的符号,如果不仅 可以在本模块内访问,也可以供其他模 块访问,这样的符号称为公共符号。一 个符号需要通过PUBLIC伪指令说明才能 成为公共符号,这样其他模块才可以访 问它PUBLIC伪指令。 指令格式: PUBLIC 符号 , 功能:用来说明公共符号。 其中符号可以是符号常量、变量、标号 、过程名。但是符号常量的值为实数或 者是超过2个字节的整数时不能作为公共 符号使用。 , 表示允许在一条 PUBLIC伪指令中说明多个公共符号。3外部符号在另一个模块内定义的符号,需要在 本模块内访问,这样的符号称为外部符 号。要在本模块内访问一个外部符号需 要通过EXTRN伪指令将其说明为外部符 号,否则,宏汇编程序在汇编这样的调 用指令时,由于找不到对所用符号的定 义,就会给出出错信息。EXTRN伪指令。 指令格式: EXTRN 符号:类型 , 功能:用来说明外部符号及其类型。 其中符号可以是符号常量、变量、标 号、过程名。类型必须与该符号在另一 个模块中定义的类型一致。 , 表 示允许在一条EXTRN伪指令中说明多个 外部符号。外部符号的类型如下: 标号、过程名取NEAR或FAR。 变量取BYTE、WORD或DWORD。 符号常数取ABS。10.4模块化程序设计举 例小结本章介绍了模块化程序设计技术,在 大型程序的设计中,一般采用模块化程 序设计。模块化程序设计的关键是如何 正确的划分模块,关于模块的划分需要 用到后续课程的知识。因此,本章重点 是要求掌握模块化程序设计的概念、模 块的程序设计和模块之间的通信。
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号