您好,欢迎来电子发烧友网! ,新用户?[免费注册]

当前位置:电子发烧友网 > 图书频道 > 电子 > 《微计算机原理》 > 第4章 汇编语言程序设计

第3节 BIOS中断和DOS中断

 

  §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。