实验七 .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时也会出错。