实验七 .COM 文件和简单中断程序设计

. 实验目的:

1. 掌握生成 .COM 文件的方法

2. 掌握 PC 机的简单时钟中断程序设计方法

. 实验要求:

1. 掌握生成 .COM 文件的方法 包括:

A 掌握编制生成 .COM 文件的汇编程序要求

B DOS 下生成 .COM 文件的方法

2. 掌握简单时钟中断程序设计方法

A 8086系统的中断原理

B PC 机的中断组织

C 截取系统中断的一般方法

D 时钟中断的截取

. 实验仪器:

PC机一台

. 实验内容:

7.1 在已编的汇编语言程序中选取一例,按 .COM 的方式重新编写,并生成.COM文件。

7.2 利用 DOS 系统给出的 1CH 中断 ( 18.2 次/秒 ), 在屏幕右上角显示闪烁的笑脸符 ( ASCII 码 02H ), 回车后停止。( 或显示扑克符号等 )

7.3 在屏幕右上角显示系统时间。

要求: 利用时钟中断显示时间,当前程序处于循环状态,键入回车后关闭时间显示,返回系统。

7.4 在一定时间内键盘若无输入,则将屏幕内容保存至缓冲区,然后清屏, 直到按任意键后再恢复原显示,回车退出。

提示: 修改 INT 1CH 中断

首先判别存屏标志,若已存屏则返回,否则对表征最近击键时间的固定单元加一,根据其大小(即最近一次击键时间 ),完成存屏或空操作,然后返回。

二 修改键盘中断

将最近击键时间的固定单元置零,判存屏标志,若已存屏则恢复原显示

三 字符显示保存方式

单色由 B000:0000, 彩色由 B800:0000 开始,每两个单元保存一个显示字符,格式为一个字节为 ASCII 码,另一字节为显示属性,整个屏幕有25*80共 2000 字符,段内偏移由 0000 至 0F9F 。

7.5 自编题。 

. 实验原理:

1 .COM 文件汇编语言程序设计

   COM 文件与一般的 EXE 文件在结构上有所不同,COM 文件是在早期没有分段的情况下设计的,具有结构简单,占用内存小,数据及代码都在同一段内等即以 64K 为单位的特点,较实用的汇编程序,如对驻留程序,中断服务程序等的设计,在可能的情况下,一般都采用这样的程序结构。

   COM 文件在加载时将 CS, DS, ES, SS 段都定义在 PSP 段基址上,IP 定义在 PSP+100H 处,SP 堆栈指针被定位在程序的末端,并在顶存放两个字节的00H。

编制 COM 文件应遵循下列规则:

1. 只能建立一个代码段,内含代码和数据段,同时不能单独设置堆栈段。

2. 代码和数据只能在 100H 以后设置,一般用伪指令 "ORG 100H" 放在汇编程序的开始,程序应在 ORG 100H 定义程序段的入口。即在 100H 处设置一条可执行指令,一般的结构如下:

CODE SEGMENT

ASSUME CS:CODE,DS:CODE

ORG 100H

START: JMP BEGIN

........

数据区

........

BEGIN: 程序区

........

CODE ENDS

END START

3. 数据区可放在段内的任意地方,当然,不能与代码域冲突

4. 整个程序是在一个段内,而涉及到段定义有关的指令,伪指令都会在程序链接时给出生成 COM 文件错误,如:

MOV AX,CODE

MOV DS,AX

    该指令串在 EXE 文件是没有问题,但如果要生成 COM 文件,换句话说,若按 COM 文件方式设计程序,则会出错,因为在 COM 文件中不存在段的概念。要完成上述功能应采用:

PUSH CS

POP DS

    同样的伪指令 SEG 也不能在 COM 文件中出现。

5    在多模块情况下,要求所有的目标模块必须具有同一代码段名和类别名,且赋予 PUBLIC 供链接程序 LINK 使用,具有 " ORG 100H " 入口的主模块应优先链接。

COM 文件的生成是在用 MASM 和 LINK 的方式生成 EXE 文件后,再使用 DOS 下的 EXE2BIN 命令将其转换成 COM 文件。若用 TASM 和 TLINK 时编译和链接程序时,在TLINK 加 /Tdc 开关直接生成 COM 文件。如果程序不能满足 COM 文件编程要求,则在执行 EXE2BIN 时会给出错误信息,当然,在TLINK时也会出错。