§4.4 BIOS中断和DOS中断
本节概述
任何程序的运行均离不开一定的硬件环境和软件环境。 基本硬件环境包括CPU、存储器、I/O设备,从原理上讲,使用IN/OUT指令可以控制任何I/O设备。事实上,BIOS中,以中断处理程序的形式提供了微机中基本I/O设备的控制程序,称为"BIOS中断",应用程序可以用"INT n"指令调用这些程序。
教学目标
掌握BIOS中断和INT 21H中断的功能。
本节内容:
概述
BIOS中断
DOS系统功能调用(INT 21H)
INT20H(结束程序的另一种方法)
重点难点
BIOS中断和INT 21H中断的功能。
学习方法
在学习的同时编写一些小的中断服务程序以便很好地掌握BIOS中断和INT 21H中断的功能。
关键字
BIOS中断 INT 21H中断
参考资料
1、《微型计算机技术及应用》,戴梅萼等编著,第二版,清华大学出版社
2、《微型计算机原理》,季维法等编著,第一版,电子科技大学出版社
3、《微型计算机原理—常见题型解析及模拟题》,武自芳主编,西北工业大学出版社
4、《80X86/80X87汇编语言程序设计》,洪志全等编著,电子科技大学出版社
§4.4.1 概述
任何程序的运行均离不开一定的硬件环境和软件环境。 基本硬件环境包括CPU、存储器、I/O设备(键盘、磁盘、打印机、显示卡等),关于CPU和存储器,已经作了一些了解。从原理上讲,使用IN/OUT指令可以控制任何I/O设备。以打印机为例,使用IN指令可以读入打印机的状态(有/无纸、能否接收新的数据等)、使用OUT指令把数据送给打印机、给打印机发控制命令(移动打印头、某些打印针击打)。一个简单的I/O设备使用要求,需要一系列IN/OUT等控制指令,可以把一些基本使用要求编写为子程序,供调用。事实上,BIOS中,以中断处理程序的形式提供了微机中基本I/O设备的控制程序,称为"BIOS中断",应用程序可以用"INT n"指令调用这些程序。
程序运行的主要软件环境是操作系统。操作系统为程序运行提供基本的服务,如,程序的装入、结束,内存的分配,文件管理等。以DOS操作系统为例,它也以中断处理程序的形式提供这些服务,称为"DOS中断", 应用程序也用"INT n"指令调用这些服务。 MS_DOS的DOS中断是由IO.SYS、MSDOS.SYS两个文件提供的中断处理程序。(PC_DOS:IBMBIO.COM、IBMDOS.COM)。
PC系列机有256种中断类型,8086CPU使用其中5个(0号除数为0中断、1号单步中断、2号NMI中断、3号断点中断、4号溢出中断),80286及以上系统中,通过中断控制器8259使用的硬件中断为16个。其余中断类型为BIOS中断和DOS中断,它们称为"软件中断"。
IBM PC/XT 机中的256级中断安排
另外,设备制造商提供的设备控制程序(称为驱动程序Driver)可能替换BIOS中断和DOS中断。
当前,驱动程序的概念使用非常广泛,它泛指软件与硬件或其他软件的接口程序。
§4.4.2 BIOS中断
1、INT 17H(打印机I/O调用)
INT 17H中断处理程序有三个功能:
当AH=0时,把AL中的字符在打印机上打印出来。
当AH=1时,把AL中的初始化控制命令送给打印机。
当AH=2时,把打印机的状态读至AL寄存器。
寄存器AH中的值决定一个中断处理程序的功能,称其为"功能号"。当AH=0时调用INT 17H中断,称为"INT 17H的0号功能",可以简记为"INT 17H/0"
2、INT 16H(键盘I/O中断)
AH=0:从键盘读入ASCII字符,放在AL中。
AH=1:测试有无键被按下。ZF=0,表示按过任意键,并在AL中获 得该键的ASCII码。ZF=1,未按过键。
AH=2:读取特殊功能键的状态至AL中。
3、 INT 1AH (BIOS日期、时间中断)
AH=0:读当前时钟值到CX、DX中。CX为高位,DX为低位。时钟单位是54.9ms(1/18.2秒)(65536000/1193180)。
AH=1:设置当前时钟值。
§4.4.3 DOS系统功能调用(INT 21H)
DOS的绝大部分功能均以INT 21H中断处理程序提供。不同DOS版本一般均有几十个INT 21H功能。这些功能有文件和磁盘管理、字符设备管理、时钟管理、内存管理、网络管理等,INT 21H的功能能见表1和表2。
表1
表2
§4.4.4 INT 20H
DOS中断INT20H的功能是结束程序并返回DOS。
入口参数:CS=程序段前缀(PSP)的段地址。 IP=0000H。
出口参数:无。
问题: (1) 程序段前缀PSP的概念。
(2) 不能直接给CS、IP赋值,如何指定入口参数?
1、 程序的执行过程
在DOS提示符,如C:>下,键入一个可执行文件名(COM、EXE)后,在运行该程序前,DOS完成以下工作:
(1) 从磁盘中找到该文件。
(2) 检测用户可用内存,在可用内存的低地址段建立一个程序段前缀(PSP,Program Segment Prefix)。
(3) 把该文件从磁盘上装入内存中PSP的后面。
(4) DOS设置DS、ES的值等于PSP的段地址。如果该程序为COM文件,则把CS、SS的值也设置为PSP的段地址。
(5) 开始执行该文件的第一条指令。
2、 程序段前缀PSP
DOS运行程序时,需要该程序的一系列参数(如,程序结束地址、Ctrl_Break处理程序的地址、出错处理地址等),另外还需要一个磁盘读、写的缓冲区,这个参数区和缓冲区,称为"程序段前缀(PSP)"。 PSP共有256字节,它是运行程序时,由DOS自动在内存中建立的。 PSP的结构下图所示:
注意:
(1)、PSP起始两字节存放"INT 20H"指令的机器码(CDH 20H),该指令使程序返回DOS;
(2)、EXE程序刚运行时,DS和ES指向PSP首址,即INT20H指令的机器码:COM程序刚运行时,DS,ES,CS,SS均指向PSP首址。
在PSP结构中,我们只关心前两个字节,它是指令"INT 20H"的机器码(CDH、20H)。
3、 INT20H(结束程序的另一种方法)
(1) 在程序执行前,DS=程序段前缀PSP的段地址,因此,
PUSH DS
MOV AX,0
PUSH AX
这三条指令,把PSP的段地址和0值推入堆栈。
(2) RET指令从堆栈中取出两字,送CS和IP,因此,RET指令执行时,CS=PSP的段地址,IP=0000H。CPU转移到PSP处执行。
(3) PSP处的指令是INT 20H,它的功能是结束程序并返回DOS,因此,该程序能正确返回DOS。