实验二 系统功能调用和模块化程序的设计

上传人:xzh****18 文档编号:46705362 上传时间:2018-06-27 格式:PDF 页数:7 大小:215.49KB
返回 下载 相关 举报
实验二 系统功能调用和模块化程序的设计_第1页
第1页 / 共7页
实验二 系统功能调用和模块化程序的设计_第2页
第2页 / 共7页
实验二 系统功能调用和模块化程序的设计_第3页
第3页 / 共7页
实验二 系统功能调用和模块化程序的设计_第4页
第4页 / 共7页
实验二 系统功能调用和模块化程序的设计_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《实验二 系统功能调用和模块化程序的设计》由会员分享,可在线阅读,更多相关《实验二 系统功能调用和模块化程序的设计(7页珍藏版)》请在金锄头文库上搜索。

1、 实验二实验二 系统功能调用和模块化程序的设计系统功能调用和模块化程序的设计 、实验目的和要求:、实验目的和要求: 1. 熟悉汇编语言程序设计中系统调用和模块化设计的方法。 2. 熟练掌握 DOS 和 BIOS 系统功能调用的方法。 3. 熟悉模块化程序的设计思想。 4. 掌握模块划分、模块间参数传递等模块化程序设计的基本方法。 一、实验提要一、实验提要 系统功能调用的概述系统功能调用的概述 系统功能调用是指通过软件中断指令的方式来调用操作系统程序中内建的 能够完成一些基本处理功能的服务子程序。 PC 机的系统功能调用有 DOS 功能调用和 BIOS 功能调用两种。 其中,BIOS 不仅提供了

2、所有标准设备驱动程序,而且还支持装载和初始化 计算机系统等;DOS 提供了应用编程接口 API(Application Programming Interface)层,包括设备支持(如:键盘、显示器、打印机和通讯端口等)以及 文件支持等。 系统功能调用是汇编语言程序设计中最基本的操作之一,故务请熟练掌握 DOS 和 BIOS 的一些基本功能调用的方法,以顺利进行汇编语言程序设计的 上机实验。 BIOS 功能调用 BIOS 功能调用 顾名思义, “BIOS(BASE INPUT/OUTPUT SYSTEM)”就是“基本输入/输出 系统” 。 BIOS 是保存在计算机主板上的一片由 CMOS 芯片

3、构成的 ROM 存储 器中,亦即 BIOS 是以硬件形式提供给用户的软件。并且 BIOS 占据固定的 地址空间,在任何一台 PC 机(或 PC 兼容机)中,ROM BIOS 都占据 0F000H: 0F000H:0FFFFH 的地址空间,共 64KB(BIOS 虽然占据 64KB 地址空间, 而实际上 BIOS 通常并未全部使用该空间,其空闲地址空间常被计算机制造 商用来存放相关的计算机制造信息乃至一些管理程序,当然实际的计算机用 户也可根据需要来使用其中的空闲地址空间以存放相关的开发应用程序。 BIOS 通常具有两种功能:系统自检与物理设备管理。当打开电源或按下 RESET 时,计算机 CP

4、U 的 CS 寄存器将被置成 0FFFFH,而 IP 将被置成 0, 即 CPU 上电复位后马上就从物理地址 0FFFF0H 取指令执行,此地址正是被 分配在 ROM 内。一般的 ROM 在此位置都有一远程转移指令,CPU 将转去 执行 SELFTEST(自检)程序,对机器的各个部分进行检测,确认机器正常后 再将所用的操作系统从磁盘上装入内存,即引导和启动操作系统。 实际上, DOS 管理设备的功能就是通过调用 BIOS 的功能来完成的, 而 DOS 所起的是“指挥官”的作用,真正“干活出力”的是 BIOS。计算机的硬件、 BIOS、操作系统(如 DOS、Windows、Linux 等等)、应

5、用软件和用户之间的 层次关系如图2.1 所示。 - 188 -图 E2.1 硬件、软件(BIOS、DOS 等系统软件、应用软件等)与用户的关系 BIOS 对设备的管理实质上是通过中断调用来实现的,故“BIOS 中断”主要 是指由 BIOS 以中断处理程序的形式提供的计算机中基本 I/O 设备的控制程 序,它管理了计算机的基本硬件特性,将与硬件相关的繁琐的管理与控制以 子程序的方式提供给用户使用。因此,BIOS 功能调用就是通过使用软件中 断指令“INT n”的形式来调用“BIOS 中断”服务子程序,以实现对键盘输 入、显示输出、打印输出、磁盘读写、串行通信乃至系统时间设定和读取等 基本的 I/

6、O 管理。 BIOS 系统功能调用的更多相关内容,请参见“实验九 图形显示程序的设计”和“附录E BIOS 中断调用” 。 BIOS 系统功能调用的更多相关内容,请参见“实验九 图形显示程序的设计”和“附录E BIOS 中断调用” 。 DOS 功能调用 DOS 功能调用 DOS 功能调用的方式是将功能码 00H62H 存入寄存器 AH 中, 而将所需的相 关参数(有的 DOS 系统功能调用不需要)存放在 CX、DX 等寄存器中,然后通 过软件中断指令 INT 21H 来实现功能码所规定的操作功能。DOS 系统功能调用的更多相关内容,请参见“附录 F DOS 功能调用” 。 DOS 系统功能调用

7、的更多相关内容,请参见“附录 F DOS 功能调用” 。 DOS 系统功能调用的一般步骤为:系统功能调用的一般步骤为: 根据需要,传送入口参数到相应的寄存器中。 输入功能号到 AH 寄存器。 调用相应的 DOS 系统功能中断(INT 21H)。 根据需要,取出出口参数作相应处理。 BIOS 对计算机的控制最为彻底,而 DOS 次之,但是 BIOS 的编程要比 DOS 编程繁琐且难度大,而 DOS 功能调用在 BIOS 功能调用的基础上,将 BIOS 子程序进一步“累积” ,变成用户使用更为方便的子程序。 汇编语言程序设计中模块化的实现方法汇编语言程序设计中模块化的实现方法 “模块化”是指将一个

8、程序分解成多个具有独立功能的部分并分别编写为对 应的程序模块,经分别汇编、调试后,再将所有程序模块连接在一起形成完 整的程序。模块化是计算机语言程序设计通用的基本技术,务请通晓。 “模块化”的优点 “模块化”的优点 单个程序模块易于编写、调试及修改。 不同模块可以分配给不同的编程者来编写及调试,有利于加快工作进度。 程序的易读性好。 程序的修改可局部化。 频繁使用的任务可以编制成模块存在库里供多个任务使用。 - 189 - 模块化程序设计的一些基本方法或处理原则 模块化程序设计的一些基本方法或处理原则 1) 正确地描述整个程序需要完成什么样的工作; 2) 把整个工作划分成多个任务,并画出层次图

9、; 3) 确切定义每个任务必须做什么事及与其它任务之间如何进行通信,写出模块说明; 4) 把每个任务写成汇编语言模块,并进行调试; 5) 把各个模块连接在一起,经过调试形成一个完整的程序; 6) 把整个程序和它们的说明合在一起形成文件。 模块划分 模块划分 模块化程序设计的关键是模块的划分,而划分模块是一个从顶向下 (top-down) 的程序设计过程。 通常将所要解决的问题当作是一个总控模块, 亦即所谓的主模块。 模块划分的一般步骤: 第一步是确定主要的子模块,亦即将总任务划分成几个主要的子任务。 一般而言,一个任务可以分成输入任务、输出任务和一个或几个进行处理或计算的子任务。 在划分子模块

10、的过程中, 应明晰每个模块的功能、 数据结构及相互之间的关系。 第二步是将这些主要的子模块中的一些专门的子任务再划分给下一层的子模块去做,当然也要明晰它们相互之间的关系。 第三步是重复上述过程,直至将程序细分成易于理解和易于实现的小模块为止。 模块层次图 模块划分时所使用的工具通常是层次图和模块说明。 层次图是一个方块图,用来表示模块和子模块之间的关系。 模块说明应简要地写出模块的功能、所用基本算法、模块的输入输出以及它们的数据结构等,另还应写出程序中哪些数据应放在公共数据区,可以由所有模块访问;哪些数据则应该在有直接从属关系的模块间传送等。 一般说来,有了层次图和各个模块的模块说明后,划分模

11、块的工作就完成了。 籍由层次图即可明晰各模块之间的从属关系,如图 E2.2 所示例。 图 E2.2 模块划分层次图示意 由图 E2.1 可见,主模块可以调用下一层的子模块 A、B、C,而这些子模块又可以调用它下一层的子模块 E、B 等。并且,一个子模块可以出现在层次图的多处,也可以从属于多个模块,如图 E2.1 中的模块 B 和 D。 有了层次图以后,各模块之间的从属关系就很清楚了。层次图的顶端是主模块,它是一个总控模块,直接控制位于其下一层的各个模块的执行过程,而各主要的子模块再去控制其下一层的子模块,依次类推。 - 190 - 模块化程序的组合技术 模块化程序的组合技术 程序的各个模块通常

12、有各自的代码段和数据段,在模块相连接时,并不一定要把所有的代码段或数据段分别连接在一起形成一个大的代码段或数据段。在很多情况下,各程序模块仍然有各自的代码段和数据段等逻辑分段,只是通过模块之间的调用来进行工作。当然,有时有些程序模块也有需要连接在同一段内。为解决各程序模块的逻辑段之间如何相互连接或排列,以及各程序模块之间会有的一些共同使用的符号以及参数的传送等问题,则需要相关的模块组合技术。 构成程序的每个模块均是完整的程序,而实现模块之间的组合主要依靠两类伪操作指令: 说明多个模块在连接时有关段的组合类型伪操作: 为解决模块组合时的各模块逻辑段的组合方式,而提供了以下三个段的组合类型伪操作:

13、 PUBLIC、COMMON、STACK 这三个组合类型伪操作在本教程第部分的“6”中的“三、完整段定义源程序格式中的基本伪指令”对其有详述,请查阅。 定义并引用外部符号伪操作: 为解决模块之间相互调用和共享数据亦即模块间参数传递的问题,需要使用以下两个伪指令: EXTRN、PUBLIC EXTRN 当一个模块需要调用其它模块中的(子)程序或者需要使用其它模块中的数据,那么首先要使用这个伪指令说明调用的子程序或引用的数据是“EXTRN(External,外部的) ” 。 若用于说明所调用的(子)过程,其格式为: EXTRN (子子)过程名:属性过程名:属性 其中“属性”是指“NEAR(近程)

14、”或“FAR(远程) ” 。 若用于说明所引用的数据变量,其格式为: EXTRN 数据标号:类型数据标号:类型 其中“类型”是指“BYTE(字节) ”或“WORD(字) ”等。 亦即,由此说明“EXTRN”后的数据标号或(子)过程名是在本模块中需要引用的而在其它模块中所定义的符号,即外部符号。 因此,当一个模块需要调用其它模块中的子程序或者需要使用其它模块中的数据时,就首先要使用“EXTRN”伪指令说明所要调用的子程序或引用的数据是“外部的(External) ” PUBLIC 若某个模块中的数据变量或(子)过程允许被其它模块来调用,则这样的 数据变量和子过程就必须使用“PUBLIC”伪指令进

15、行说明,其格式为: PUBLIC (子子)过程名(或数据标号)过程名(或数据标号) ,(子子)过程名(或数据标号)过程名(或数据标号) 亦即,由此说明“PUBLIC”后的数据标号或(子)过程名是全局符号,而 能够被其它模块引用。 - 191 -当然,并非一个模块中所有数据变量与子过程都可以由其它模块调用或引用。 特别注意:此处的“PUBLIC”伪指令与上述的组合类型中的“PUBLIC”完全不是一码(回)事,务请掌握其各自含义和用法。 特别注意:此处的“PUBLIC”伪指令与上述的组合类型中的“PUBLIC”完全不是一码(回)事,务请掌握其各自含义和用法。 注:注:模块间共享数据与(子)过程的编

16、程技术除了使用“EXTRN”与“PUBLIC”这两个指令来实现外,对于“共享数据”这个问题还可通过将相关数据段的组合类型定义为“COMMON”属性来实现(请参阅相关内容)。 在模块组合生成一个可以独立运行的可执行文件时,必须有且只允许有其中之一的过程为主过程,且在其代码段的最后必须有 END 伪操作语句“END 主过程的起始地址标号” 。相应地,亦将包含主过程的模块程序称为“主程序” ,而其它模块称之为“子程序” 在模块化程序中,各个模块在明确各自的功能和相互之间的连接约定之 后,就可以独立编写、汇编和调试。 模块化设计的示例 模块化设计的示例 以下为两个模块程序以下为两个模块程序 MOD1.ASM 和和 MOD2.ASM。 NAME MOD1 EXTRN DISP:FAR PUBLIC STR1,N ,BUF DATA1 SEGMENT S

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号