《汇编语言程序设计》第10章.ppt
《《汇编语言程序设计》第10章.ppt》由会员分享,可在线阅读,更多相关《《汇编语言程序设计》第10章.ppt(17页珍藏版)》请在三一办公上搜索。
1、第10章 模块化程序设计 模块化程序设计概述 段的定义 模块间的通讯 模块的连接 源程序综合举例,10.1.1 模块化程序设计概念,在设计大型程序时,常常要将整个问题分解为若干个小问题,必要时还要将小问题再次分解为更小的若干问题,每个小问题编写成独立的源文件,最后将所有的源文件连接起来组合成一个大程序。也就是说,一个程序往往由多个源文件组成,那么构成一个程序的各个相对独立的源文件通常称为模块。这样把一个程序分成多个功能相对独立的程序模块分别编制、调试后,再用连接程序把它们连接在一起生成一个完整的程序的设计的方法称为模块化程序设计。10.1.2 模块化程序设计的优点 开发速度快 可维护性与可读性
2、强 可移埴性强,10.1.3 模块划分的原则和方法,模块的划分应该是灵活的,但不应是程序的等分,应使各模块具有相对的独立性和完整性,可以单独编程、调试,但也要考虑各个模块之间的联系。模块划分是一个自上而下的过程。主模块是一个总控模块,首先确定主要的模块,也就是说,要把总任务划分成几个主要的子任务。一般来说,可以分成输入任务、输出任务和一个或多个进行处理或计算的子任务。在划分子模块的过程中应该明确每个模块的功能、数据结构及相互之间的关系。第二步,对这些主要的子模块根据需要再划分成下一层的子模块。第三步,重复上述过程,一直到程序分成易于理解和易于实现的小模块为止。,1.模块划分的原则,(1)一个主
3、模块完成对各子模块的调用,实现总体任务,而每个子模块完成相应的子任务,各模块间除应在功能上分开,逻辑上独立,减少横向联系外,不能使用转移指令在模块间转来转去,避免逻辑上的混乱;(2)子模块大小应适中,模块过大就失去了模块化的意义,也会给编程和调试带来一定困难;模块过小,会在的时间和空间上造成浪费;(3)差别很大的两个程序段应作为两个模块;(4)当一些数据被多个程序段所公用,那么这些数据所在的程序段应作为一个模块;(5)当某些程序功能片段为多个模块所公用时,应将它们作为公用子程序模块;(6)各个模块的结构最好能设计为单入口、单出口的形式,各模块间的接口应该简单,要尽量减少公共标识符的个数。,2.
4、模块划分的方法,(1)层次图 层次图是表示模块与模块之间关系的方块图。层次图的顶端是主模块,即一个总控制块,直接控制位于其下一层的各个模块的执行,而各主要的子模块再去控制其下一层的子模块。(2)模块说明 模块说明是对模块的功能、算法、模块输入和输出以及它们的数据结构的简单说明。应该考虑程序中哪些数据应该放在公共数据区,供所有模块访问,哪些数据可在有直接从属关系的模块间传送。,返回,10.2 段的定义,SEGMENT伪指令的完整的格式为:段名 SEGMENT 定位类型 组合类型 类别 段名 ENDS 10.2.1 定位类型 定位类型用于指定该段的段起始地址的特性,也称为定位属性或对齐属性。连接程
5、序连接目标文件时,根据定位类型来确定段的开始地址。一共有5种选择。1PAGE(页)段的起始地址从页边界开始,也就是说必须为256的倍数,即该地址的最后8位二进制位应为0。2PARA(节)段的起始地址必须从段边界开始,也就是说必须为16的倍数,即该地址的最后4位二进制位应为0。3DWORD(双字)段的起始地址必须从双字边界开始,也就是说必须为4的倍数,即该地址的最低两位二进制位应为0。4WORD(字)段的起始地址必须从字边界开始,也就是说必须为偶数地址,即该地址的最低一位二进制位应为0。5BYTE(字节)段的起始地址从字节边界开始,也就是说可以从任意单元地址起,也就是说为下一个可用的字节地址开始
6、。当段定义中没有指定段的定位类型时,定位类型的缺省方式为PARA。,10.2.2 组合类型,组合类型也称为组合属性,组合类型标明本段与其他模块中同名段的组合连接关系,是用于控制本段与其他模块中的同名、同类型段的组合连接方式,有五种可选的组合类型。1PUBLIC 连接程序将不同模块中的具有PUBLlC属性的同名段连接在一起,形成一个新的段,公用一个段基址。2STACK STACK与PLIBLIC的处理方式一样,只是连接后的段为堆栈段,连接程序在连接过程中自动将新段的段基址送到堆栈段寄存器SS,新段的长度送到堆栈指针寄存器SP。当堆栈段定义时没有说明为STACK类型,就要在程序中用指令给堆栈段寄存
7、器SS和堆栈指针寄存器 SP赋值,不然连接程序时就会产生警告信息。3COMMON COMMON类型会产生一个覆盖段,连接程序把该类型的同名段指定相同的段地址,段的长度取决于最长的COMMON段的长度。,4MEMORY 连接程序不单独区分MEMORY类型,把MEMORY与PUBLIC类型同等对待。MASM程序允许使用它主要是为了与其他支持Intel MEMORY类型的连接程序兼容。5AT表达式 连接程序将具有AT类型的段装在表达式值所指定的段地址边界上。这个类型可以为标号或变量赋予绝对地址,以便程序以标号或变量的形式存取这些存储单元的内容。一般在AT类型的段中不定义指令或数据,只说明一个地址结构
8、。6NONE NONE为默认值,表示该段是独立的,与其他同名段无组合关系,每段都有自己的段起始地址。10.2.3 类别“类别”用于控制各段的存放顺序,类别名相同的所有段要相邻存放。类别名可以是用单引号括起来任何合法的名称,若类别选择项省略,则表明该段类别为空。典型的类别名有:用于代码段的CODE、用于数据段的DATA和用于堆栈段的STACK。,返回,10.3 模块间的通讯,10.3.1 各模块之间的通信方式 当程序由几个模块组成时,势必存在一个模块使用另一个模块中定义的变量、标号以及子程序等问题。由于子程序与调用它的语句,定义变量、标号及使用变量、标号的语句分别在不同的模块中,汇编是分开进行的
9、,汇编程序无法知道子程序入口地址及变量、标号的地址。因此,要由连接程序汇集各模块送来的地址信息,综合决定各个调用指令的转移地址及变量、标号地址。因此,汇编语言提供了几种伪指令来完成不同模块间的通讯。1 TITLE 格式:TITLE 标题 功能:给原程序指定一个标题,而后.LST文件每页的头都会出现这个标题。2NAME和END 在模块化程序设计中,常要用到模块定义伪指令。模块定义使用NAME和END两条伪指令。模块定义伪指令的一般格式为:格式:NAME 模块名 END 标号 模块名为本模块的名称,是NAME的操作数;END表示源程序到此结束,若程序包含多个模块,则每个模块的最后必须有END,如果
10、是主模块,其END语句中可以指定一个标号,这个标号表示程序的启动地址,只有主模块的END语句后有标号。,3PUBLIC伪指令 格式:PUBLIC 标识符,标识符,.功能:表明本模块中所定义的标识符能够提供给其他模块引用。在一模块中,PUBLIC伪指令语句一般放在程序的开头,只能说明一次。PUBLIC伪指令其后的标识符是本模块定义的可供其他模块调用的标识符。这些标识符是在本模块中定义的符号常量、标号、过程名或变量,各名字之间用逗号隔开。注意:寄存器名或其值为实数及其值超过两个字节的整数的符号常量均不能作公共标识符使用。一旦经过PUBLIC伪指令定义,EXAM子程序就成为公共子程序,即可被多个不同
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言程序设计 汇编语言 程序设计 10
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-6527950.html