




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、汇编语言汇编语言程序设计程序设计 模块化程序设计概述 段的定义 模块间的通讯 模块的连接 源程序综合举例 汇编语言汇编语言程序设计程序设计一、模块化程序设计概念一、模块化程序设计概念 在设计大型程序时,常常要将整个问题分解为若干在设计大型程序时,常常要将整个问题分解为若干个小问题,必要时还要将小问题再次分解为更小的若干个小问题,必要时还要将小问题再次分解为更小的若干问题,每个小问题编写成独立的源文件,最后将所有的问题,每个小问题编写成独立的源文件,最后将所有的源文件连接起来组合成一个大程序。也就是说,一个程源文件连接起来组合成一个大程序。也就是说,一个程序往往由多个源文件组成,那么构成一个程序
2、的各个相序往往由多个源文件组成,那么构成一个程序的各个相对独立的源文件通常称为模块。这样把一个程序分成多对独立的源文件通常称为模块。这样把一个程序分成多个功能相对独立的程序模块分别编制、调试后,再用连个功能相对独立的程序模块分别编制、调试后,再用连接程序把它们连接在一起生成一个完整的程序的设计的接程序把它们连接在一起生成一个完整的程序的设计的方法称为模块化程序设计。方法称为模块化程序设计。二、二、 模块化程序设计的优点模块化程序设计的优点 开发速度快 可维护性与可读性强 可移埴性强汇编语言汇编语言程序设计程序设计三、三、 模块划分的原则和方法模块划分的原则和方法 模块划分是一个自上而下的过程。
3、主模块是一个总模块划分是一个自上而下的过程。主模块是一个总控模块,首先确定主要的模块,也就是说,要把总任务控模块,首先确定主要的模块,也就是说,要把总任务划分成几个主要的子任务。一般来说,可以分成输入任划分成几个主要的子任务。一般来说,可以分成输入任务、输出任务和一个或多个进行处理或计算的子任务。务、输出任务和一个或多个进行处理或计算的子任务。在划分子模块的过程中应该明确每个模块的功能、数据在划分子模块的过程中应该明确每个模块的功能、数据结构及相互之间的关系。第二步,对这些主要的子模块结构及相互之间的关系。第二步,对这些主要的子模块根据需要再划分成下一层的子模块。第三步,重复上述根据需要再划分
4、成下一层的子模块。第三步,重复上述过程,一直到程序分成易于理解和易于实现的小模块为过程,一直到程序分成易于理解和易于实现的小模块为止。止。汇编语言汇编语言程序设计程序设计 1. 模块划分的原则 (1) (1) 一个主模块完成对各子模块的调用,实现总体任务,一个主模块完成对各子模块的调用,实现总体任务,而每个子模块完成相应的子任务,各模块间除应在功能上分开,而每个子模块完成相应的子任务,各模块间除应在功能上分开,逻辑上独立,减少横向联系外,不能使用转移指令在模块间转逻辑上独立,减少横向联系外,不能使用转移指令在模块间转来转去,避免逻辑上的混乱;来转去,避免逻辑上的混乱; (2) (2) 子模块大
5、小应适中,模块过大就失去了模块化的意子模块大小应适中,模块过大就失去了模块化的意义,也会给编程和调试带来一定困难;模块过小,会在的时间义,也会给编程和调试带来一定困难;模块过小,会在的时间和空间上造成浪费;和空间上造成浪费; (3) (3) 差别很大的两个程序段应作为两个模块;差别很大的两个程序段应作为两个模块; (4) (4) 当一些数据被多个程序段所公用,那么这些数据所当一些数据被多个程序段所公用,那么这些数据所在的程序段应作为一个模块;在的程序段应作为一个模块; (5) (5) 当某些程序功能片段为多个模块所公用时,应将它当某些程序功能片段为多个模块所公用时,应将它们作为公用子程序模块;
6、们作为公用子程序模块; (6) (6) 各个模块的结构最好能设计为单入口、单出口的形各个模块的结构最好能设计为单入口、单出口的形式,各模块间的接口应该简单,要尽量减少公共标识符的个数。式,各模块间的接口应该简单,要尽量减少公共标识符的个数。汇编语言汇编语言程序设计程序设计2.2.模块划分的方法模块划分的方法 (1) (1) 层次图层次图 层次图是表示模块与模块之间关系的方块图。层次图的层次图是表示模块与模块之间关系的方块图。层次图的顶端是主模块,即一个总控制块,直接控制位于其下一层的顶端是主模块,即一个总控制块,直接控制位于其下一层的各个模块的执行,而各主要的子模块再去控制其下一层的子各个模块
7、的执行,而各主要的子模块再去控制其下一层的子模块。模块。 (2) (2) 模块说明模块说明 模块说明是对模块的功能、算法、模块输入和输出以及模块说明是对模块的功能、算法、模块输入和输出以及它们的数据结构的简单说明。应该考虑程序中哪些数据应该它们的数据结构的简单说明。应该考虑程序中哪些数据应该放在公共数据区,供所有模块访问,哪些数据可在有直接从放在公共数据区,供所有模块访问,哪些数据可在有直接从属关系的模块间传送。属关系的模块间传送。 汇编语言汇编语言程序设计程序设计 段的定义段的定义 SEGMENT伪指令的完整的格式为: 段名 SEGMENT 定位类型 组合类型 类别 段名 ENDS1 1、
8、定位类型定位类型 定位类型用于指定该段的段起始地址的特性,也称为定位属性或对齐属性。连接程序连接目标文件时,根据定位类型来确定段的开始地址。一共有5种选择。 1 1PAGE(PAGE(页页) ) 段的起始地址从页边界开始,也就是说必须为256的倍数,即该地址的最后8位二进制位应为0。 2 2PARA(PARA(节节) ) 段的起始地址必须从段边界开始,也就是说必须为16的倍数,即该地址的最后4位二进制位应为0。 3 3DWORD(DWORD(双字双字) ) 段的起始地址必须从双字边界开始,也就是说必须为4的倍数,即该地址的最低两位二进制位应为0。 4 4WORD(WORD(字字) ) 段的起始
9、地址必须从字边界开始,也就是说必须为偶数地址,即该地址的最低一位二进制位应为0。 5BYTE(字节) 段的起始地址从字节边界开始,也就是说可以从任意单元地址起,也就是说为下一个可用的字节地址开始。 当段定义中没有指定段的定位类型时,定位类型的缺省方式为PARA。汇编语言汇编语言程序设计程序设计2 2、 组合类型组合类型 组合类型也称为组合属性,组合类型标明本段与其他模块中同名段的组合连接关系,是用于控制本段与其他模块中的同名、同类型段的组合连接方式,有五种可选的组合类型。 1 1PUBLICPUBLIC 连接程序将不同模块中的具有PUBLIC属性的同名段连接在一起,形成一个新的段,公用一个段基
10、址。 2STACK STACK与PLIBLIC的处理方式一样,只是连接后的段为堆栈段,连接程序在连接过程中自动将新段的段基址送到堆栈段寄存器SS,新段的长度送到堆栈指针寄存器SP。当堆栈段定义时没有说明为STACK类型,就要在程序中用指令给堆栈段寄存器SS和堆栈指针寄存器 SP赋值,不然连接程序时就会产生警告信息。 3COMMON COMMON类型会产生一个覆盖段,连接程序把该类型的同名段指定相同的段地址,段的长度取决于最长的COMMON段的长度。汇编语言汇编语言程序设计程序设计 4MEMORY 连接程序不单独区分MEMORY类型,把MEMORY与PUBLIC类型同等对待。MASM程序允许使用
11、它主要是为了与其他支持Intel MEMORY类型的连接程序兼容。 5AT表达式 连接程序将具有AT类型的段装在表达式值所指定的段地址边界上。这个类型可以为标号或变量赋予绝对地址,以便程序以标号或变量的形式存取这些存储单元的内容。一般在AT类型的段中不定义指令或数据,只说明一个地址结构。 6NONE NONE为默认值,表示该段是独立的,与其他同名段无组合关系,每段都有自己的段起始地址。3、 类别 “类别”用于控制各段的存放顺序,类别名相同的所有段要相邻存放。类别名可以是用单引号括起来任何合法的名称,若类别选择项省略,则表明该段类别为空。典型的类别名有:用于代码段的CODE、用于数据段的DATA
12、和用于堆栈段的STACK。 汇编语言汇编语言程序设计程序设计模块间的通讯模块间的通讯1、 各模块之间的通信方式 当程序由几个模块组成时,势必存在一个模块使用另一个模块中定义的变量、标号以及子程序等问题。由于子程序与调用它的语句,定义变量、标号及使用变量、标号的语句分别在不同的模块中,汇编是分开进行的,汇编程序无法知道子程序入口地址及变量、标号的地址。因此,要由连接程序汇集各模块送来的地址信息,综合决定各个调用指令的转移地址及变量、标号地址。因此,汇编语言提供了几种伪指令来完成不同模块间的通讯。 1 TITLE 格式:TITLE 标题 功能:给原程序指定一个标题,而后.LST文件每页的头都会出现
13、这个标题。 2NAME和END 在模块化程序设计中,常要用到模块定义伪指令。模块定义使用NAME和END两条伪指令。 模块定义伪指令的一般格式为: 格式:NAME 模块名 END 标号 模块名为本模块的名称,是NAME的操作数;END表示源程序到此结束,若程序包含多个模块,则每个模块的最后必须有END,如果是主模块,其END语句中可以指定一个标号,这个标号表示程序的启动地址,只有主模块的END语句后有标号。 汇编语言汇编语言程序设计程序设计 3PUBLIC伪指令 格式:PUBLIC 标识符 ,标识符,. 功能:表明本模块中所定义的标识符能够提供给其他模块引用。 在一模块中,PUBLIC伪指令语
14、句一般放在程序的开头,只能说明一次。PUBLIC伪指令其后的标识符是本模块定义的可供其他模块调用的标识符。这些标识符是在本模块中定义的符号常量、标号、过程名或变量,各名字之间用逗号隔开。注意:寄存器名或其值为实数及其值超过两个字节的整数的符号常量均不能作公共标识符使用。 一旦经过PUBLIC伪指令定义,EXAM子程序就成为公共子程序,即可被多个不同模块调用。 4EXTRN伪指令 格式:EXTRN标识符:类型,标识符:类型, 功能:用来说明本模块中用到的标识符是由其它模块定义的,即本模块要引用其他模块定义的标识符。 EXTRN是伪指令,其后的标识符就是本模块中要引用的外部标识符。而且标识符必须指
15、出其类型。变量的类型可以是BYTE,WORD或DWORD,标号和过程名的类型可以是NEAR或FAR。所有的标识符类型必须与原定义时的类型一致;被EXTRN伪指令说明的标识符必须是在它所定义的模块中被PUBLIC伪指令说明过的标识符。 汇编语言汇编语言程序设计程序设计模块的连接模块的连接 在模块化程序设计中,一个大的程序分成了若干子模块,每个模块具有完整的结构和独立的功能,并且能单独汇编和调试。在实际使用时如何将这些具有独立功能的模块连接成一个完整的整体呢?一般分两种情况:源程序级间的装配连接和目标文件级间的装配连接。1、 源程序级间的装配连接源程序级间的装配连接 将若干个源文件(*.ASM)连
16、成一个完整的文件,汇编后形成一个目标模块( .OBJ)方式,称为源程序装配连接。源程序级间的装配连接常常是被装配的若干模块分别以源文件的形式存在,当需要在源主程序中插入一个已存在的子程序文件,或是多个源文件要合成一块的时候使用。汇编语言汇编语言程序设计程序设计2、 目标文件级间的装配连接目标文件级间的装配连接 目标模块连接就是通常所说的模块连接,是多模块程序设计的主要形式。目标模块连接是把被装配的各个模块分别汇编后生成各自的目标文件(.obj)经连接成一个可执行文件,它的实现比源文件连接复杂。 1 1目标模块连接目标模块连接 目标模块的连接时要使用连接程序LINK,通过LINK将各模块连接成一
17、个可执行程序。命令格式如下: LINK 模块l文件名十模块2文件名十模块3文件名十 在LINK执行时,向使用者询问可执行文件名时,回答一个指定的文件名,则连接后的可执行文件名就是回答中所指定的文件名;如果没有回答指定文件名,则连接后可执行文件名将取所提供的第一个目标文件名。假设MASM程序在D盘MASM目录下,目标模块为file_1.obj、file_2.obj和file_3.obj,则 D:MASMLINK file_1+file_2+file_3 ObjectModeles.obj: RunFilefile_1.exe:mainfile ListFilenul.map:mainfile L
18、ibraries.lib:汇编语言汇编语言程序设计程序设计2 2段的组合与定位段的组合与定位 连接程序在执行时要对目标模块做两遍扫描,第一遍扫描是对所有段分配段地址,并建立一张外部符号表;第二遍扫描是确定与这些外部符号有关的指令机器码值。连接完成后建立了装入模块,再由装入程序把该模块装入内存等待执行。 对所有段分配段地址,涉及到段定义中的属性以及PC机的可重定位技术。汇编程序汇编成的目标模块均是以浮动的零作为段起始地址,理论上讲该模块可以定位在主存中的任何地方。而连接程序可实现多个目标模块的连接,并按各段的新定位地址修改有关的目标代码,使之成为一个整体来运行。在用连接程序将多个目标模块连接在一
19、起时,被连接模块要向连接程序提供两个方面的信息:各段之间的组合方式和各模块之间的通信方式。各段之间的组合方式由段定义中的组合类型和类别确定。 LINK程序连接时,先处理组合类型,后处理定位类型,再处理类别,因此,各模块中具有同一种组合形式的段,其定位类型不得相互矛盾,类别名或者省略,或者相同。L1NK程序连接时把类别名相同的所有段(段名未必相同)放在连续的存储区内,但仍然是不同的段。类别名相同的各个段在连接时,先出现的在前,后出现的在后,每段都有自己的超始地址。没有类别名的逻辑段,与其它没有类别名的逻辑段一起连续装入内存。 若多个模块的段都为COMMON组合类型,连接后组合成一个互相覆盖的段,
20、段的长度取二者的长者,这种连接方法只有当各模块需要公共数据区时才使用,否则各数据段内容相互覆盖便会出错。若多个模块的段都为PUBLIC组合类型,连接后组合成一个相邻连接的段,互不覆盖,连接顺序由连接程序确定,组合后形成的段的长度约等于各个段长度之和。汇编语言汇编语言程序设计程序设计源程序综合举例源程序综合举例 例 从键盘输入的一个长度不超过50个字符的字符串,将其中的小写字母转变为大写字母输出,非字母字符不变。 解:可按题意和前面讲述的原则,把整个程序分成3个模块: 模块1是主程序,通过调用模块2和模块3定义的子程序实现接收字符串以及小写字母转换大写字母的任务;模块2定义子程序IN_SUB接收
21、输入的字符串及子程序OUT_SUB输出字符串;模块3定义子程序TRANS将串中的大写字母转换成小写字母。 应用例子层次图应用例子层次图 汇编语言汇编语言程序设计程序设计;主模块;主模块BLOCK_1BLOCK_1:NAME NAME BLOCK_1 BLOCK_1 ;模块模块1 1PUBLIC PUBLIC BUFBUF;本模块缓冲区,其它模块要使用本模块缓冲区,其它模块要使用EXTRN EXTRN IN_SUB:FAR,OUTSTR:FAR,TRANS:FARIN_SUB:FAR,OUTSTR:FAR,TRANS:FAR;使用其它模块的子程序使用其它模块的子程序STACK STACK SEG
22、MENT STACK STACKSEGMENT STACK STACKDW 32 DUP(0)DW 32 DUP(0)STACK STACK ENDSENDSDATA DATA SEGMENT SEGMENTBUF BUF DB 50 , ? , 50 DUP(?)DB 50 , ? , 50 DUP(?)DATA DATA ENDS ENDSCODESG CODESG SEGMENTSEGMENTMAIN MAIN PROC FARPROC FARASSUME ASSUME CS:CODE,DS:DATA,SS:STACKCS:CODE,DS:DATA,SS:STACKMOV AX, DAT
23、AMOV AX, DATAMOV DS, AXMOV DS, AXCALL FAR PTR IN_SUB CALL FAR PTR IN_SUB ;调输入字符子程序调输入字符子程序IN_SUBIN_SUBCALL FAR PTR TRANSCALL FAR PTR TRANS;调转换字符子程序调转换字符子程序TRANSTRANSCALL FAR PTR OUT_SUBCALL FAR PTR OUT_SUB;调输入字符子程序调输入字符子程序OUT _SUBOUT _SUBMOV AX, 4C00HMOV AX, 4C00H;返回返回INT 21HINT 21HMAIN MAIN ENDPEND
24、PCODESG CODESG ENDSENDS END MAIN END MAIN ; ;主模块结束主模块结束 汇编语言汇编语言程序设计程序设计;子模块;子模块2 2 BLOCK_2BLOCK_2NAME NAME BLOCK_2BLOCK_2;命名模块命名模块2 2EXTRN EXTRN BUF:BYTE BUF:BYTE ;使用其它模块的缓冲区使用其它模块的缓冲区PUBLIC PUBLIC IN_SUB,OUT_SUBIN_SUB,OUT_SUB;其它模块要使用其它模块要使用CODE CODE SEGMENTSEGMENTASSUME ASSUME CS:CODECS:CODEIN_SUB
25、IN_SUBPROC FARPROC FAR ;输入子程序输入子程序PUSH DXPUSH DXPUSH AXPUSH AXLEA DX,BUFLEA DX,BUFMOV AH,10MOV AH,10INT 21HINT 21H;输入字符输入字符POP AXPOP AXPOP DXPOP DXRETRETIN_SUB IN_SUB ENDPENDPOUT_SUB OUT_SUB PROC FARPROC FARPUSH DXPUSH DXPUSH AXPUSH AXLEA DX,BUF+2LEA DX,BUF+2MOV AH,9MOV AH,9INT 21HINT 21H;输出字符输出字符POP AXPOP AXPOP DXPOP DXRET
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 医学护理临床指南
- 科学饮食管理方案
- 加强地方债务管理
- 防火楼梯合同协议书
- 养殖鱼合同协议书
- 合同聘用终止协议书
- 大庆交易合同协议书
- 合同协议书的网站
- 酒吧员工合同协议书
- 合同协议书数字内容
- 2025鄂尔多斯准格尔旗事业单位引进40名高层次人才和急需紧缺专业人才笔试备考试题及答案解析
- 【MOOC】理解马克思-南京大学 中国大学慕课MOOC答案
- 传统园林技艺智慧树知到期末考试答案章节答案2024年华南农业大学
- JGT266-2011 泡沫混凝土标准规范
- 中学自主招生考试物理试题
- 小学数学 西南师大版 四年级下册 小数的加法和减法部优课件
- 四川大学-刘龙飞-毕业答辩PPT模板
- 工作分析试题及答案
- 小学数学教学专题讲座
- 突发事件应急演练指南
- 无人机驾驶员培训基地项目建议书范文
评论
0/150
提交评论