第4章汇编程序设计中国科学技术大学4.2DOS功能调用第4章汇编程序设计中国科学技术大学4.2DOS功能调用§4.2DOS系统功能调用和BIOS中断调用4.2.1概述4.2.2DOS系统功能调用4.2.3BIOS中断调用第4章汇编程序设计中国科学技术大学4.2DOS功能调用4.2.1概述磁盘操作系统DOS采用模块化、层次化结构,其层次结构如图4.4所示。第4章汇编程序设计中国科学技术大学4.2DOS功能调用4.2.1概述组成DOS的各主要模块的功能:系统硬件主要指I/O设备,如CRT显示器、打印机、键盘、硬盘和鼠标等。基本输入输出系统BIOS(BasicInputOutputSystem)包含了能直接与底层硬件打交道的设备驱动程序。此外还包含系统设置信息、开机后自检程序和系统自启动程序。利用中断调用指令INTn,可以直接调用BIOS中的外设驱动程序,实现对主要I/O设备的控制管理。第4章汇编程序设计中国科学技术大学4.2DOS功能调用DOS核心MSDOS.SYS该模块以BIOS为基础,为用户提供一大批可以直接使用的服务程序,这组服务程序称为DOS系统功能调用。可用INT21H指令来调用,并以功能号来区分不同的服务程序。它们主要用来实现文件管理、存储器管理及设备管理等,功能比BIOS更齐全、更完整。命令处理程序COMMAND.COM该模块以可执行命令文件的形式存放在系统盘上,它执行后便给出DOS命令提示符“”,由它接收用户在此提示符下键入的命令,进行分析处理后,让机器执行各种应用程序,并在CRT上显示执行结果。第4章汇编程序设计中国科学技术大学4.2DOS功能调用4.2.1概述4.2.2DOS系统功能调用4.2.3BIOS中断调用第4章汇编程序设计中国科学技术大学4.2DOS功能调用4.2.2DOS系统功能调用1.中断处理程序分类8086CPU可处理256类中断,利用INTn指令,可直接调用256个系统已编写好的中断处理程序。INTn指令中的类型号n=00~FFH;n=00~04H为专用中断,处理除法错、单步、不可屏蔽中断NMI、断点、溢出中断;n=10H~1AH、2FH、31H、33H为BIOS中断,即保存在系统ROMBIOS中的BIOS功能调用。第4章汇编程序设计中国科学技术大学4.2DOS功能调用1.中断处理程序分类n=20H~2EH为DOS中断,应用DOS提供的功能程序来控制硬件,可对显示器、键盘、打印机、串行通信等字符设备提供输入输出服务。例如:n=20H为程序结束中断,利用INT20H中断可返回DOS操作系统。n=21H则为功能最强大的DOS中断,它包含了很多子功能,给每个子功能程序赋一个编号,称为功能号,调用前要送到AH寄存器中。第4章汇编程序设计中国科学技术大学4.2DOS功能调用2.DOS系统功能调用方法DOS系统功能调用的步骤:1)功能调用号送到AH寄存器中,AH=00~6CH。2)入口参数送到指定的寄存器中,一种功能调用又包含多个子功能,有些调用不带参数。3)执行INT21H指令。4)得到出口参数,或将结果显示在CRT上。部分DOS功能调用见表4.4(看书)。第4章汇编程序设计中国科学技术大学4.2DOS功能调用3.DOS系统功能调用举例1)DOS键盘功能调用利用DOS功能调用,可将读入的键值送进AL,并显示在CRT上,或检查是否有键压下等,还可将从键盘输入的一串字符输入到内存缓冲区中。例4.18DOS功能调用1,等待从键盘输入一个字符。MOVAH,01H;AH功能调用号01HINT21H;AL读入键值,并显示该字符若有键压下,读入键值,并检查是否为Ctrl-Break键?若是,自动调用INT23H中断,执行退出命令;否则将键值送入AL,并显示该字符。第4章汇编程序设计中国科学技术大学4.2DOS功能调用3.DOS系统功能调用举例例4.19交互式程序中,用户键入字母键Y或N,分别转入不同的程序去处理,并在CRT上显示键入字符;若按了Ctrl-Break,则结束程序,否则继续等待。GET_KEY:MOVAH,01H;AH功能调用号01HINT21H;AL读入键值CMPAL,‘Y’;键值是Y吗?JEYES;是,转YESCMPAL,‘N’;不是Y,是N吗?JENO;是,转NOJNEGET_KEY;不是N,返回继续等待YES:┇;按Y键的处理程序NO:┇;按N键的处理程序第4章汇编程序设计中国科学技术大学4.2DOS功能调用3.DOS系统功能调用举例例4.20DOS功能调用6,控制台I/O(控制台指键盘和CRT),不检查是否按了Ctrl-Break键。MOVAH,6;6号功能调用MOVDL,0FFH;DL=FFH,键盘输入INT21H当调用时DL=FFH,表示从键盘输入字符。执行后,若ZF=0,则AL中为输入字符的键值;若ZF=1,表示无键压下,AL中不是键值。如果调用时DL≠FFH,表示从屏幕输出字符。第4章汇编程序设计中国科学技术大学4.2DOS功能调用3.DOS系统功能调用举例例4.21利用0AH号DOS功能调用,将键入字符送输入缓冲区。调用前预先定义一个缓冲区,首地址为:DS:DX。缓冲区的第一个字节由用户指定,存放缓冲区最大容量(字节数);第二个字节保留,功能调用后存放实际键入的字符个数;从第三个字节开始存入键盘输入的实际字符的ASCII码,直到击了ENTER键为止。若键入的字符数小于最大字节数,缓冲区其余部分都填0;若大于最大字节数,则后键入的字符丢失,并发出嘟嘟声。第4章汇编程序设计中国科学技术大学4.2DOS功能调用程序如下:DATASEGMENTBUFFDB50;定义缓冲区最大50(32H)字节DB?;存实际键入字节数DB50DUP(?);定义50个字节空间;存放键入字符的ASCII码DATAENDSCODESEGMENT┇MOVAX,DATA;定义DS:DXMOVDS,AX;DS=缓冲区首址基地址MOVDX,OFFSETBUFF;DX=缓冲区首址偏址MOVAH,0AH;AH=功能号10INT21H┇CODEENDS第4章汇编程序设计中国科学技术大学4.2DOS功能调用3.DOS系统功能调用举例若键入的字符串为“goodmorning.”,包括空格共13(0DH)个字符,则缓冲区各单元存储的信息如图4.5所示。要检查是否已在缓冲器中存入字符串,可用显示字符的功能调用,将字符串显示在屏幕上。第4章汇编程序设计中国科学技术大学4.2DOS功能调用3.DOS系统功能调用举例2)显示功能调用2号功能调用用来显示单个字符,9号功能调用则显示以$结尾的字符串。例4.22编写显示星号“*”的程序。MOVDL,‘*’;DL要显示字符的ASCII码MOVAH,02H;AH功能号02HINT21H;显示星号“*”第4章汇编程序设计中国科学技术大学4.2DOS功能调用9号功能调用前,要将字符串的首地址送到DS:DX中,调用后显示以DS:DX为首地址的字符串,直到遇到$符为止,$符不显示出来。例4.23显示信息“Tryagain.”,并回车、换行。DATASEGMENTMESSDB‘Tryagain.’,0DH,0AH,‘$’;待显示字符串DATAENDS┇MOVAX,SEGMESSMOVDS,AX;DS字符串起始段地址MOVDX,OFFSETMESS;DX偏移地址MOVAH,9;AH功能号9INT21H;显示该字符串程序中,0DH、0AH是回车、换行键的ASCII码。第4章汇编程序设计中国科学技术大学4.2DOS功能调用3.DOS系统功能调用举例3)打印功能调用将要在打印机上打印的字符的ASCII码送到DL中,作为入口参数,然后执行5号功能调用,DL中的字符便会送到打印机去打印。例4.24在打印机上打印一串字符“Right.”,打印前换页,打印完后回车、换行。第4章汇编程序设计中国科学技术大学4.2DOS功能调用程序如下:CHARDB0CH,‘Right.’,0DH,0AH,‘$’;待打印字符串,0CH为换行码MOVBX,0;BX指向字符串开头MOVAH,5;AH=功能号5NEXT:MOVDL,CHAR[BX];取一个字符CMPDL,‘$’;是$符吗JETO_STOP;是,转停止打印INT21H;否,打印该字符INCBX;指向下一个字符JMPNEXT;继续打印下一个字符TO_STOP:┇;停止打印处理第4章汇编程序设计中国科学技术大学4.2DOS功能调用4.2.1概述4.2.2DOS系统功能调用4.2.3BIOS中断调用第4章汇编程序设计中国科学技术大学4.2DOS功能调用4.2.3BIOS中断调用在80X86微型计算机中,从内存地址0FE000H开始的8KB存储空间中,用EPROM固化了ROMBIOS程序。(现代的PC机用的是EEPROM)ROMBIOS模块包含了系统加电自检程序、引导装入程序、基本I/O设备驱动程序以及接口控制等功能模块,它们以中断服务程序的形式向程序员开放。第4章汇编程序设计中国科学技术大学4.2DOS功能调用有些DOS系统功能调用和BIOS中断调用能完成同样的功能。例如,要打印一个字符,可以用INT21H的5号DOS功能调用,也可用BIOS的INT17H的0号中断调用。由于BIOS更接近硬件,使用起来要复杂一些,尽量使用DOS系统功能调用。有些情况下,必须使用BIOS中断调用。例如,INT17中断的2号调用为读打印机状态,DOS功能调用无这种功能,只能使用BIOS中断调用。第4章汇编程序设计中国科学技术大学4.2DOS功能调用ROMBIOS中断调用的方法与DOS系统功能调用法类似,不过每个中断调用可能会包含多个子功能,用功能号来区分它们。BIOS中断调用的基本步骤为:1)功能号送AH2)设置入口参数3)执行INTn指令4)分析出口参数及状态下面介绍几种BIOS中断调用。第4章汇编程序设计中国科学技术大学4.2DOS功能调用1.键盘中断调用INT16H这种类型的中断调用有3种功能,功能号为0,1,2,调用前,需将功能号送到AH中。1)0号功能调用功能:从键盘读入一个字符。例4.27编写从键盘读入一个字符的程序段。MOVAH,0;功能号0INT16H;等待键盘输入第4章汇编程序设计中国科学技术大学4.2DOS功能调用1.键盘中断调用INT16H键盘上的键用2个8位数值进行标记:最高位b7决定该键是压下还是松开,b7=0,表示该键压下,b7=1,表示键已松开。后7位是这样定义的:对于有ASCII码的键来说,第一字节为ASCII码,第二字节为键盘扫描码,后者由系统根据键的位置确定;对于无ASCII码的键来说,第一字节为0,第二字节为扩展码。这样,利用INT16H的0号功能调用,就可知道是哪个键压下了或松开了。第4章汇编程序设计中国科学技术大学4.2DOS功能调用1.键盘中断调用INT16H2)1号功能调用查询键盘缓冲区,对键盘扫描,但不等待。例4.28编程查看键盘缓冲区。MOVAH,1;功能号1INT16H调用结果:ZF=0,键盘缓冲区不空,有键按了,AL=键入字符ASCII码,AH=扫描码;ZF=1,缓冲区空。第4章汇编程序设计中国科学技术大学4.2DOS功能调用1.键盘中断调用INT16H3)2号功能调用检查键盘上各特殊功能键的状态。例4.29检查特殊功能键的状态。MOVAH,2;功能号2INT16H调用结果:AL=键盘状态字节KB_Flag,每1位对应一个特殊功能键,如图:第4章汇编程序设计中国科学技术大学4.2DOS功能调用2.打印机中断调用INT17H这类中断调用也有0、1、2等3种。调用前,AH功能号,DX打印机号(0~2)。1)0号功能在打印机上打印1个字符,AH打印机状态。调用前AL=待打印字符的ASCII码。例4.30在打印机上打印一个字符“$”。MOVAL,‘$’;AL待打印字符$的ASCII码MOVDX,02H;打印机号MOVAH,0;功能号INT17H;打