《中断及中断功能调用.ppt》由会员分享,可在线阅读,更多相关《中断及中断功能调用.ppt(95页珍藏版)》请在金锄头文库上搜索。
1、7 中断及中断功能调用主讲:傅中君7 中断及中断功能调用n7.1 中断概述n7.2 8086中断系统n7.3 中断功能调用概述n7.4 键盘输入中断调用n7.5 显示器输出中断调用n7.6 磁盘文件管理n7.1.1 中断的基本概念n什么是中断?n与生活场景的比较与生活场景的比较正在看书正在看书电话铃响电话铃响接电话接电话继续看书继续看书执行程序执行程序事件发生事件发生事件处理事件处理继续执行程序继续执行程序中断处理中断处理中断请求及响应中断请求及响应实际场景实际场景计算机计算机中断返回中断返回7.1 概述中断的定义 nCPU执行程序时,由于发生了某种随机的事件(外部或内部),引起CPU暂时中断
2、正在运行的程序,转去执行一段特殊的服务程序(称为中断服务程序或中断处理程序),以处理该事件,该事件处理完后又返回被中断的程序继续执行,这一过程称为中断。中断源n引起CPU中断的事件中断源。例如:n外设外设请求输入输出数据,报告故障等请求输入输出数据,报告故障等n事件事件掉电、硬件故障、软件错误、非法操作、定时掉电、硬件故障、软件错误、非法操作、定时时间到等时间到等n中断源分为:外部中断、内部中断n内部中断:内部中断:CPU内部执行程序时自身产生的中断内部执行程序时自身产生的中断n外部中断:外部中断:CPU以外的设备、部件产生的中断以外的设备、部件产生的中断n 8086/8088的外部中断信号:
3、INTR、NMInINTR可屏蔽中断请求,高电平有效,受可屏蔽中断请求,高电平有效,受IF标志的控标志的控制。制。IF=1时,执行完当前指令后时,执行完当前指令后CPU对它作出响应。对它作出响应。 nNMI非屏蔽中断请求,上升沿有效,任何时候非屏蔽中断请求,上升沿有效,任何时候CPU都要响应此中断请求信号。都要响应此中断请求信号。为何计算机中要引入中断?n提高数据传输率;n避免了CPU不断检测外设状态的过程,提高了CPU的利用率。n实现对特殊事件的实时响应。如多任务系统操作系统中: n缺页中断n设备中断n各类异常n实时时钟 等中断系统的功能n(1)为了加强中断系统的灵活性,对于各种中断请求,应
4、具有屏蔽和开放的功能,使程序员可以灵活控制。n(2)具有“中断级别”的判断和控制功能,即能实现中断源排队。当多个中断源申请中断时,能根据事先的设定及时响应中断。n(3)能实现中断嵌套,即高级别的中断能中断较低级别的中断。n(4)系统响应中断后,能自动进行中断处理。中断过程n五个步骤:n中断请求n中断判优(有时还要进行中断源识别)n中断响应n中断服务n中断返回以下以外部中断外部中断为主介绍这五个步骤。7.1.2 中断过程与中断管理1)中断请求n外设接口(中断源)发出中断请求信号,送到CPU的INTR或NMI引脚;n中断请求信号:边沿请求,电平请求中断请求信号:边沿请求,电平请求例如,例如,NMI
5、为边沿请求,为边沿请求,INTR为电平请求为电平请求n中断请求信号应保持到中断被处理为止;nCPU响应中断后,中断请求信号应及时撤销。n在8086/8088系统中,外设的中断要经过8259A可编程中断控制器(PIC)的排队判优后向CPU发出: (I/O接口接口) PIC CPU2)中断源识别n计算机中的中断源有很多,CPU必须识别是哪一个设备产生中断。识别中断源有两个方法:n软件查询。将中断信号从数据总线读入用程序进软件查询。将中断信号从数据总线读入用程序进行判别。行判别。n中断矢量法。由中断源提供中断类型号,中断矢量法。由中断源提供中断类型号,CPU根根据类型确定中断源。(据类型确定中断源。
6、(8086/8088即采用此种即采用此种方法)方法)3)中断判优n多个中断源产生中断,CPU首先为谁服务?中断优先级排队问题。n中断优先级控制要处理两种情况:n对同时产生的中断:应首先处理优先级别较高的中断;若优先级别相同,则按先来先服务的原则处理;n对非同时产生的中断:低优先级别的中断处理程序允许被高优先级别的中断源所中断即允许中断嵌套。n中断优先级的控制方法n硬件判优硬件判优链式判优、并行判优(中断向量法)链式判优、并行判优(中断向量法)n软件判优软件判优顺序查询中断请求,先查询的先服务(即先查询的优先顺序查询中断请求,先查询的先服务(即先查询的优先级别高)级别高)n通常将中断判优与中断源
7、识别合并在一起进行处理。nx86系统中,这项任务由系统中,这项任务由PIC和和CPU共同完成。共同完成。链式判优电路原理图链式判优电路原理图INTAinCPUINTAINTR外设外设1 1外设外设2 2外设接口外设接口1 1菊花链菊花链逻辑电路逻辑电路外设接口外设接口2 2外设外设3 3外设接口外设接口3 311菊花链菊花链逻辑电路逻辑电路菊花链菊花链逻辑电路逻辑电路IREQIREQIREQ中断确认中断确认INTAinINTAin中断确认中断确认中断确认中断确认菊花链逻辑电路菊花链逻辑电路INTAinIREQINTR&=1 1INTAoutDB三态门中断向量码E外设接口外设接口中断确认中断确认
8、菊花链菊花链逻辑电路逻辑电路3)中断响应n在每条指令的最后一个时钟周期,CPU检测INTR或NMI信号。若以下条件成立,则CPU响应中断:n当前指令执行完。对INTR,还应满足以下条件n当前指令是STI和和IRET,则下条指令也要执行完。n当前指令带有LOCK、REP等指令前缀时,则把它们看成一个整体,要求完整地执行完;n对INTR,CPU应处于开中断状态,即IF=1;n当前没有复位(RESET)和保持(HOLD)信号。n若NMI和 INTR 同时发生,则首先响应NMI。3)中断响应(续)nCPU中断响应时,要做下述三项工作:n向中断源发出INTA#中断响应信号;n断点保护,包括CS、IP和P
9、SW(FLAGS)。这主要是保证中断结束后能返回被中断的程序。n获得中断服务程序首地址(入口)。如何得到中断处理程序的首地址?n固定入口法n中断向量法4)中断处理(中断服务)n中断服务子程序特点n为”远”过程(类型为FAR)n要用IRET指令返回n中断服务子程序要做的工作n保护现场(PUSH regs) n开中断(STI) n进行中断处理 n恢复现场(POP regs) n中断返回(IRET) 5)中断返回n执行中断返回指令IRETnIRET指令将使CPU把堆栈内保存的断点信息弹出到IP、CS和FLAG中,保证被中断的程序从断点处能够继续往下执行。IPLIPHCSLCSHFLAGLFLAGHS
10、PIPLIPHCSLCSHFLAGLFLAGHSPIPCSFLAG进入中断服务程序时中断返回后7. 2 8086的中断系统n与中断有关的控制线为:NMI、INTR、INTA#n8086系统的中断源n内部中断n除法溢出:类型号0,商大于目的操作数所能表达的范围时产生。n单步中断:类型号1,TF=1时产生(当前指令需执行完)n断点中断:类型号3,这是一个软件中断,即INT 3指令。n溢出中断:类型号4,这是一个软件中断,即INTO指令。n软件中断:即INT n指令,类型号n(0-255)。n外部中断n非屏蔽中断NMI:类型号2,不可用软件屏蔽,CPU必须响应它。n可屏蔽中断INTR:类型号由PIC
11、提供。IF=1时CPU才能响应。8086/8088中断源类型中断源类型NMIINTR中断逻辑中断逻辑软件中断指令软件中断指令溢出中断溢出中断除法错除法错单步中断单步中断非屏蔽中断请求非屏蔽中断请求中断控中断控制器制器8259APIC8086/8088CPU8086/8088CPU内部逻辑内部逻辑断点中断断点中断可可屏屏蔽蔽中中断断请请求求n43012n8086系统采用中断类型(向量)码来识别不同的中断源,每个中断源都有一个与它相对应的中断类型码 。n溢出、断点、除法溢出、单步、非屏蔽中断的类型码为固定值n软件中断的类型码由指令给出n可屏蔽中断的类型码由PIC给出nCPU响应INTR中断时,会产
12、生两个中断响应总线周期,要求PIC在第2个中断响应总线周期把中断类型码放到数据总线上,供CPU读入。中断向量表(IVT) n存放各类中断的中断服务程序的入口地址(段和偏移) n表的地址位于内存的00000H003FFH,大小为1KB,共256个入口n每个入口占用4 Bytes,低字为段内偏移,高字为段基址n根据中断类型号获得中断服务程序入口的方法: (n为中断类型号)n中断向量在IVT中的存放地址4nn256个中断占用个中断占用1KB区域,就形成中断向量表区域,就形成中断向量表8086的中断向量表向量号255的CS值用户中断(向量号255)3FCH向量号255的IP值向量号2的CS值非屏蔽中断
13、(向量号2)008H向量号2的IP值向量号1的CS值单步中断(向量号1)004H向量号1的IP值向量号0的CS值除法错中断(向量号0)000H向量号0的IP值8086系统中各中断的优先级n优先级从高到低顺序如下:n内部中断nNMInINTRn单步中断NYNYNNNNNYY执行指令执行完否?取指令IF=1?内部中断?NMI?INTR?TF=1?类型码=0255类型码=2类型码=1中断响应,读回类型码FLAG入栈TEMPTFIF=TF=0CS、IP入栈计算向量表地址高字CS低字IP执行中断服务程序NMI?TEMP=1?转入中断服务程序恢复CS和IP恢复FLAGS返回被中断的程序YYYYNIRET指
14、令的操作8086/8088的中断处理流程的中断处理流程NMI、INTR、单步和除法错单步和除法错中断同时产生中断同时产生时的中断处理时的中断处理过程过程DIVTF=1IF=1INTRNMIPUSH FLAGS、CS、IPCLEAR IF & TF,中断入口CS:IP除法错除法错NMI(IF、TF = 0)PUSH FLAGS、CS、IPCLEAR IF & TF,中断入口CS:IPNMI中断处理程序除法错中断处理程序(IF、TF = 0) 返回返回执行下条指令识别出INTR(IF、TF = 1) 返回返回INTR仍然有效仍然有效继续单步执行程序继续单步执行程序INTR中断处理程序INTRPUS
15、H FLAGS、CS、IPCLEAR IF & TF,中断入口CS:IP单步单步 (IF、TF = 0)PUSH FLAGS、CS、IPCLEAR IF & TF,中断入口CS:IP单步中断处理程序(IF、TF = 0) 返回返回(IF、TF = 1) 返回返回7.3 中断功能调用概述n7.3.1 DOS中断和BIOS中断 n7.3.2 DOS中断和BIOS中断使用方法 7.3.1 DOS中断和BIOS中断 n在存储器系统中,内存器高端8K的ROM中存放有基本输入输出系统(Basic Input/Output System,BIOS)例行程序。nBIOS给PC系列的不同微处理器提供了兼容的系统
16、加电自检、引导装入、主要I/O设备的处理程序以及接口控制等功能模块来处理所有的系统中断。n使用BIOS功能调用,给程序员编程带来极大方便。程序员不必了解硬件的具体细节,可直接使用指令设置参数,并中断调用BIOS例行程序,所以利用BIOS功能调用编写的程序简洁,可读性好,而且易于移植。磁盘操作系统(Disk Operating System)是PC机上最重要的操作系统,它是由软盘或硬盘提供的。它的两个DOS模块IBMBIO.COM和IBMDOS.COM使BIOS使用起来更方便。因为DOS模块提供了更多更必要的测试,使DOS操作比使用相应功能的BIOS操作更简易,而且DOS对硬件的依赖性更少些。D
17、OS模块和ROM BIOS的关系如下图所示。 DOS中断7.3.2 DOS中断和BIOS中断使用方法 DOS功能调用与BIOS功能都通过软件中断调用。在中断调用前需要把功能号装入AH寄存器,把子功能号装入AL寄存器,除此之外,还需要在CPU的寄存器中提供专门的调用参数。一般来说,调用DOS或BIOS功能时,有以下几个步骤:(1)将调用参数装入指定的寄存器。(2)如需功能调用号,把它装入AH。(3)如需子功能调用号,把它装入AL。(4)按中断号调用DOS或BIOS。 (5)检查返回参数是否正确。7.4 键盘输入中断调用 n7.4.1 ASCII与扫描码 n7.4.2 BIOS键盘中断 n7.4.
18、3 DOS中断调用7.4.1 ASCII与扫描码键盘是计算机最基本的一种输入设备,用来输入信息,以达到人机对话的目的。键盘主要由3种基本类型的键组成:(1)字符数字键:(2)扩展功能键:如Home、End、Backspace、Delete、Insert、PgUp、PgDn以及功能键F1F10(3)和其他键组合使用的控制键:如Alt,Ctrl,Shift等 n键盘和主机通过5芯电缆相连,这5根线分别是电源线、地线、复位线以及键盘数据线和键盘时钟线。nPC机系列的键盘触点电路按16行8列的矩阵来排列,用单片机Intel8048来控制对键盘的扫描。按键的识别采用行列扫描法,即根据对行线和列线的扫描结
19、果来确定闭合键的位置,这个位置值称为按键的扫描码,通过数据线将8位扫描码送往主机。n当在键盘上“按下”或“放开”一个键时,如果键盘中断是允许的(21H端口的第一位等于0),就会产生一个类型9的中断,并转入到BIOS的键盘中断处理程序。 PC键盘n该处理程序从8255可编程外围接口芯片的输入端口读取一个字节,这个字节的低7位是按键的扫描码。最高位为0或者为1,分别表示键是“按下”状态还是“放开”状态。按下时,取得的字节称为通码,放开时取得的字节称为断码。n如ESC键按下取得的通码为01H(00000001B),放开ESC键时会产生一个断码81H(10000001B)。nBIOS键盘处理程序将取得
20、的扫描码转换成相应的字符码,大部分的字符码是一个标准的ASCII码;没有相应ASCII的键,如Alt和功能键(F1F10),字符码为0;还有一些非ASCII码键产生一个指定的操作。 按键基本处理7.4.2 BIOS键盘中断 类型16H的中断提供了基本的键盘操作,它的中断处理程序包括3个不同的功能,分别根据AH寄存器中的子功能号来确定。 (1)AH=0 本功能为从键盘读字符到本功能为从键盘读字符到AL寄存器中。寄存器中。(2)AH=1 本本功功能能为为读读键键盘盘缓缓冲冲区区字字符符到到AL寄寄存存器器中,并置中,并置ZF标志位。标志位。(3)AH=2 本功能为读取特殊功能键的状态。本功能为读取
21、特殊功能键的状态。【例7.1】下下面面给给出出一一个个利利用用键键盘盘I/O功功能能的的程程序序例例。用用INT 16H(AH=0)调用实现键盘输入字符。)调用实现键盘输入字符。DATA SEGMENT BUFF DB 100 DUP(?)MESS DB NO CHARACTER!,0DH,0AH,$DATA ENDSCODESEGMENTASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AXMOV CX,100MOV BX,OFFSET BUFF;内内存存缓冲区首址缓冲区首址 LOP1:MOV AH,1 PUSHCX MOV CX,0 MOV D
22、X,0 INT1AH ;设置时间计数器值为;设置时间计数器值为0LOP2:MOV AH,0INT1AH;读时间计数值;读时间计数值CMP DL,100 JNZLOP2 ;定时时间未到,等待;定时时间未到,等待MOV AH,1INT16H;判有无键入字符;判有无键入字符JZDONE;无键输入,则结束;无键输入,则结束MOV AH,0INT16H;有键输入,则读出键的;有键输入,则读出键的ASCII码码MOVBX,AL ;存入内存缓冲区;存入内存缓冲区INCBXPOPCXLOOP LOP1;100个未输完个未输完JMPENDONE:MOV DX,OFFSET MESSMOVAH, 09HINT21
23、H;显示提示信息;显示提示信息EN:MOVAH,4CH INT21HCODE ENDSENDSTART7.4.3 DOS键盘中断调用7.5 显示器输出中断调用 10H中断调用为显示器中断,共有17种功 能。下面列出几种主要功能的使用情况。 (1)设置显示方式()设置显示方式(0号功能)号功能)入入 口口 参参 数数 : AH=0( 功功 能能 号号 ) , AL=设设 置置 方方 式式(013H)。)。出口参数:无。出口参数:无。(2)设置光标类型()设置光标类型(1号功能)号功能)入口参数:入口参数:AH=1(功能号),(功能号),CH=光标开始行,光标开始行,CL=光标结束行。光标结束行。
24、出口参数:无。根据出口参数:无。根据CX给出光标的大小。给出光标的大小。AL显示方式显示方式04025黑白文本方式黑白文本方式14025彩色文本方式彩色文本方式28025黑白文本方式黑白文本方式38025彩色文本方式彩色文本方式4320200彩色图形方式彩色图形方式5320200黑白图形方式黑白图形方式6640200黑白图形方式黑白图形方式78025黑白文本方式(单色显示卡)黑白文本方式(单色显示卡)(3)设置光标位置()设置光标位置(2号功能)号功能) 入口参数:入口参数:AH=2(功能号),(功能号),BH=页号,页号,DH=行号,行号,DL=列号。列号。出口参数:无。根据出口参数:无。根
25、据DX确定了光标位置。确定了光标位置。(4)读当前光标位置()读当前光标位置(3号功能)号功能)入口参数;入口参数;AH=3(功能号),(功能号),BH=页号。页号。出口参数:出口参数:DH=行号,行号,DL=列号,列号,CX=光标大小。光标大小。(5)初始窗口或向上滚动()初始窗口或向上滚动(6号功能)号功能)入口参数:入口参数:AH=6,AL=上滚行数,上滚行数,CX=上滚窗口左上角的行、列号。上滚窗口左上角的行、列号。DX=上滚窗口右下角的行、列号。上滚窗口右下角的行、列号。BH=空白行的属性。空白行的属性。出口参数:无。当滚动后,底部为空白输入行。出口参数:无。当滚动后,底部为空白输入
26、行。(6)初始窗口或向下滚动()初始窗口或向下滚动(7号功能)号功能)入入口口参参数数:AH=7,AL=下下滚滚行行数数,CX=下下滚滚窗窗口口左左上上角角的的行行、列列号号。DX=下下滚滚窗窗口口右右下下角角的的行行、列列号号。BH=空空白白行行的属性。的属性。出口参数:无。当滚动后,顶部为空白输入行。出口参数:无。当滚动后,顶部为空白输入行。(7)读当前光标位置的字符与属性()读当前光标位置的字符与属性(8号功能)号功能)入口参数:入口参数:AH=08H,BH=页号。页号。出口参数:出口参数:AL为读出的字符,为读出的字符,AH为字符属性。为字符属性。表7.1 黑白方式显示属性字节表7.2
27、 彩色文本方式显示属性字节位号位号76 5 43 2 1 0属性属性字节字节BLR G BI R G B闪烁选择闪烁选择背景颜色背景颜色前景颜色前景颜色110 棕RGB颜色000 黑001蓝010绿011青100红101品红111白表7.3 背景颜色组合IRGB颜色IRGB颜色0000黑1000灰0001蓝1001浅蓝0010绿1010浅绿0011青1011浅青0100红1100浅红0101品红1101浅品红0110棕1110黄0111白1111强度白表7.4 前景颜色组(8)在当前光标位置写字符和属性()在当前光标位置写字符和属性(9号功能)号功能)入入口口参参数数:AH=9,BH=页页号号
28、,AL=字字符符的的ASCII码码,BL=字符属性,字符属性,CX=写入字符数。写入字符数。出口参数:无。出口参数:无。(9)在当前光标位置写字符()在当前光标位置写字符(10号功能)号功能)入入口口参参数数:AH=0AH,BH=页页号号,AL=字字符符的的ASCII码码,CX=写入字符数。写入字符数。出口参数:无。出口参数:无。(10)设置彩色组或背景颜色()设置彩色组或背景颜色(11号功能)号功能)入入口口参参数数:AH=0BH,BH=0或或1,BH为为0时时,设设置置背背景景颜颜色色。当当BH=1时时 ,可可设设置置彩彩色色组组,即即为为显显示示的的像像素素点点确确定定颜颜色组。色组。出
29、口参数:无。背颜色与对应值见表出口参数:无。背颜色与对应值见表7.5。(11)写像素()写像素(12号功能)号功能)入入口口参参数数:AH=0CH,DX=行行数数,CX=列列数数,AL=彩彩色色值(值(AL的的D7为为1,则彩色值与当前点内容作,则彩色值与当前点内容作异或异或运算)。运算)。出口参数:无。出口参数:无。BLIRGB颜色颜色BLIRGB颜色颜色00000黑黑81000灰灰10001蓝蓝91001浅蓝浅蓝20010绿绿101010浅绿浅绿30011青青111011浅青蓝浅青蓝40100红红121100浅红浅红50101品红品红131101浅品红浅品红60110棕棕141110黄黄7
30、0111亮灰亮灰151111白白表7.5 背景颜色组合表表7.6 彩色分组(12)读像素()读像素(13号功能)号功能)入口参数:入口参数:AH=0DH,DX=行数,行数,CX=列数。列数。出口参数:出口参数:AL=彩色值。彩色值。(13)写字符并移光标位置()写字符并移光标位置(14号功能)号功能)入入口口参参数数:AH=0EH,AL=写写入入字字符符,BH=页页号号,BL=前景颜色(图形方式)。前景颜色(图形方式)。出口参数:无。出口参数:无。(14)读当前显示状态()读当前显示状态(15号功能)号功能)入口参数:入口参数:AH=0FH。出出口口参参数数:AL=当当前前显显示示方方式式,B
31、H=页页号号,AL=屏屏幕幕上上字符列数。字符列数。【例7.2】在屏幕10行2024列处显示五朵梅花,颜色各异,且要求中间一个朵能够闪烁。 源程序:源程序:DATA SEGMENTATRI DB 6EH,52H,94H,52H,6EHDATA ENDSSTACK SEGMENT PARA STACK STACKDB 200 DUP(0)STACKENDSCODESEGMENTASSUME CS:CODE,DS:DATA,SS:STACKST: MOV AX,DATAMOV DS,AXMOV AH,0;设置;设置8025彩色文本方式彩色文本方式MOV AL,3INT10HLENSI,ATRI;属
32、性字节值表首址存;属性字节值表首址存SIMOV DI,5 ;显示;显示5个字符个字符MOV DX,0A13H ;显示位置;显示位置MOV AH,15;取当前页号;取当前页号INT10HLP:MOVAH,2;置光标位置;置光标位置INCDLINT10HMOV AL,5;显示梅花形字符;显示梅花形字符MOV BL,SIMOV CX,1MOV AH,9INT10HINCSI;指向下一属性字节;指向下一属性字节DECDI;判显示完否;判显示完否 JNZLP;未完转;未完转LP再显示再显示MOV AH,4CH;完,返回;完,返回DOSINT21HCODEENDSENDST【例7.3】采用直接对显示卡的寄
33、存器和显示缓冲区编程的方法,在VGA图形模式13H(即320200,256色)下作图,画一条彩色的线。 DATA SEGMENTSCR-LINEDW 0SCR-COLDW 0CUR-COLORDD 0hDATA ENDS CODESEGMENTASSUME CS:CODE,DS:DATAMAIN PROCFARSTAR: PUSH DSMOVAX,0PUSHAXMOVAX,DATAMOVDS,AXMOVAH,0MOVAL,13HINT10H ;设置为模式;设置为模式13HAGAIN: MOVBL,CUR-COLORMOVDX,SCR-COL;DX为像素点的为像素点的y坐标坐标MOV CX,SC
34、R-LINE ;CX为像素点的为像素点的x坐标坐标CALL DRAW-POINT ;在(;在(x,y)处画点)处画点MOV DX,SCR-COLMOV CX, SCR-LINECALL READ-POINT ;将(;将(x,y)处像素值读出)处像素值读出MOV DX,SCR-COLMOV CX, SCR-LINEADDDX,4;x+4为新点的为新点的x坐标坐标CALL DRAW-POINT ;在(;在(x+4,y)处画点)处画点INCSCR-LINE ;指向下一行;指向下一行INCSCR-COL ;指向右边的下一个点;指向右边的下一个点INCCUR-COLOR;指向下一种颜色;指向下一种颜色C
35、MP SCR-LINE,200 ;200列做完了吗?列做完了吗?JEENDLINE ;做完了,结束;做完了,结束JMPAGAIN ;没做完则重复;没做完则重复ENDLINE: RETMAIN ENDPDRAW-POINTPROCNEARPUSH ESCALLGET-ADDR ;计算偏移量,存在;计算偏移量,存在DI中中 MOV DX,0A000H;显示缓冲区首址的段地址;显示缓冲区首址的段地址MOV ES,DXMOV DX,3CDHMOV AL,01000000BOUT DX,AL ;设显示缓冲区为线性内存结构;设显示缓冲区为线性内存结构MOV ES:DI,BL ;往显示缓冲区写数据;往显示缓
36、冲区写数据POPESRETDRAW-POINTENDPREAD-POINTPROC NEARPUSH ESCALL GET-ADDR ;计算偏移量,存在;计算偏移量,存在DI中中MOV DX,0A000HMOV ES,DX;设显示缓冲区首址的段地址;设显示缓冲区首址的段地址MOV DX,3CDHMOV AL,01000000BOUTDX,AL;设显示缓冲区为线性内存结构;设显示缓冲区为线性内存结构MOV BL,ES:DI ;从显示缓冲区读值;从显示缓冲区读值POPESRETREAD-LINT ENDPGET-ADDR PROC NEARPUSH AXPUSH DXMOV AX,320 ;每行;
37、每行320个点个点MUL CX ;乘以行号即;乘以行号即y320POPDXADDAX,2X;即计算地址偏移量为;即计算地址偏移量为y320+xMOV DI,AX;偏移量送;偏移量送DIPOPAXRETGET-ADDR ENDPCODEENDSENDSTAR MOV AH,2INT10HJMPPRT1 ;再输入,再打印;再输入,再打印 EXIT:RET PRNTYENDP CODEENDSENDPRNTYPDOS显示中断调用21H中断调用为DOS中断,下面列出用于显示的几种主要功能的使用情况。 (1)显示输出()显示输出(2号功能)号功能)入入 口口 参参 数数 : AH=2( 功功 能能 号号
38、 ) , DL=显显 示示 的的 字字 符符(ASCII)。)。出口参数:无。出口参数:无。(2)字符串显示()字符串显示(9号功能)号功能)入口参数:入口参数:AH=9(功能号),(功能号),DS:DX=字符串起始字符串起始地址,地址,”$”为字符串结束符。为字符串结束符。出口参数:无。出口参数:无。7.6 磁盘文件管理 7.6.1 BIOS磁盘存取功能 7.6.2 DOS磁盘存取功能 7.6.1 BIOS磁盘存取功能 BIOS磁盘操作INT 13H处理的记录都是一个扇区的大小,都是以实际的磁道号和扇区号寻址的。读、写和检查磁盘文件之前,都要把下列寄存器初始化:AH:子功能号(读、写、检查或
39、格式化)。AL:扇区数。CH:柱面/磁道号(0为起始号)。CL:起始的扇区号(1为起始号)。DH:磁头/盘面号(对软盘是0或1)。DL:驱动器号(软盘:0驱动器A,1驱动器B,硬盘:80H驱动器1,81H驱动器2,。)ES:BX:数据区中I/O缓冲区的地址。10号功能号功能功能:复位磁盘系统。入口参数:(AH)0。出口参数:无。这个操作执行对磁盘控制器的硬件复位。如果在其他磁盘操作之后调用这个功能,则返回一系列错误。21号功能号功能功能:读磁盘状态。入口参数:(AH)1。出口参数:(AL)中返回状态字节。32号功能号功能功能:从指定磁盘的指定位置读取数据。入口参数:(AH)2 (AL)扇区数,
40、(CH),(CL)磁道号,扇区号 (DH),(DL)磁头号,驱动器号 (ES:BX):数据缓冲区地址出口参数:读成功,(AH)0,(AL)读出的扇区数; 读失败,(AH)出错代码。43号功能号功能功能:向指定磁盘的指定位置写数据。入口参数:(AH)3 (AL)扇区数,(CH),(CL)磁道号,扇区号 (DH),(DL)磁头号,驱动器号 (ES:BX):数据缓冲区地址出口参数:写成功,(AH)0,(AL)写入的扇区数; 写失败,(AH)出错代码。 54号功能号功能功能:检验磁盘扇区。入口参数:(AH)4(AL)扇区数,(CH),(CL)磁道号,扇区号(DH),(DL)磁头号,驱动器号出口参数:检
41、查成功,(AH)0,(AL)检验的扇区数; 检查失败,(AH)出错代码。7.6.2 DOS磁盘存取功能 DOS功能调用中断(INT 21H)提供了两类磁盘文件管理功能,一类是FCB表控制方式,另一类是文件代号式存取方式。 当用户需要打开或建立一个文件时,必须提供文件标识符。文件标识符用ASCII Z字符串表示。ASCII Z字符串是指文件标识符的ASCII字符串后面再加1个“0”字符。文件标识符的字符串包括驱动器名、路径名和文件名。其格式为d:pathfilename.exe其中d为驱动器名,path为路径名,.exe为文件名后缀。1建立文件(建立文件(3CH)功能:按指定文件名建立文件。入口
42、参数:(AH)3CH,DS:DX指向ASCII Z字符串的段地址和偏移地址, (CX)文件属性。出 口 参 数 : 若 操 作 成 功 , 则 CF 0,(AX)文件代号; 若操作失败,则CF1,(AX)错误代码。2打开文件(3DH)功能:打开由ASCII Z串指定的文件。入口参数:(AH)3DH,DS:DX指向ASCII Z字符串的段地址和偏移地址, (AL)存取方式代码(0:读文件,1:写文件,2:读、写文件)。出 口 参 数 : 若 操 作 成 功 , 则 CF 0,(AX)文件代号; 若操作失败,则CF1,(AX)错误代码。3关闭文件(关闭文件(3EH)功能:关闭文件代号指定的文件。入
43、口参数:(AH)3EH,(BX)文件代号。出口参数:若操作成功,则CF0; 若操作失败,则CF1,(AX)错误代码。 4读文件(读文件(3FH)功能:按文件代号读取文件。入口参数:(AH)3FH,(BX)文件代号,(CX)要读取的字节数; DS:DX指向接收数据缓冲区的段地址和偏移地址。出 口 参 数 : 若 操 作 成 功 , 则 CF 0,(AX)实际读入字节数,(AX)0,文件结束; 若操作失败,则CF1,(AX)错误代码。5写文件(写文件(40H)功能:按文件代号写文件。入口参数:(AH)40H,(BX)文件代号,(CX)要写入的字节数; DS:DX指向存放写入信息数据缓冲区的段地址和
44、偏移地址。出 口 参 数 : 若 操 作 成 功 , 则 CF 0,(AX)写入字节数; 若操作失败,则CF1,(AX)错误代码。6取取/置文件属性(置文件属性(43H)功能:按文件代号写文件。入口参数:(AH)43H,DS:DX指向ASCII Z串的段地址和偏移地址。 (AL)0,取文件属性,(AL)1,置文件属性; 置文件属性时,(CX)新文件属性(低字节)。出口参数:若操作成功,则CF0,若为取属性,(CX)文件属性; 若操作失败,则CF1,(AX)错误代码。【例7.4】在屏幕上显示包括隐含文件在内的所有文件目录程序如下:程序如下:STACKSEGMENT PARA STACK STAC
45、KDB 256 DUP(0););256个字节栈个字节栈STACKENDSDATASEGMENT PARA PUBLIC DATADIRECTORYDB 3584 DUP(0);存放盘目录区域;存放盘目录区域NAMECOUNT DB 0;文件名计数;文件名计数ERRMSGDB DISK ACCESS ERROR!DATAENDSCODESEGMENT PARA PUBLIC CODESTARTPROC FARASSUME CS:CODEPUSHDS ;保留;保留PSP段址段址MOVAX,0PUSHAX ;保留返回地址偏移;保留返回地址偏移MOVAX,DATAMOVDS,AX;建立数据段可寻址性
46、;建立数据段可寻址性ASSUME DS:DATAMOV ES,AX;建立特别段可寻址性;建立特别段可寻址性ASSUME ES:DATAMOV CX,3;读盘次数;读盘次数RETRY:PUSH CX;保留再试计;保留再试计MOV BX,OFFSET DIRECTORY;指指向向内内 存目录存放区存目录存放区MOV DL,0;驱动器号;驱动器号AMOV DH,0 ;盘的;盘的0面面MOV CH,0 ;0道道MOV CL,6;6个扇区个扇区MOV AL,7;从第;从第7扇区开始扇区开始MOV AH,2 ;读盘功能号;读盘功能号INT13H;BIOS 读盘读盘POPCX;恢复计数值;恢复计数值JNCR
47、EADOK;CF=0读盘成功转读盘成功转READOKMOV AH,0 ;CF=1置置AH=0INT13H;复位磁盘;复位磁盘BIOS调用调用LOOPRETRY;不够三次转;不够三次转RETRY再试再试ERROR: MOV BX,OFFSET ERRMSG;够够三三次不成功取出错信息位移次不成功取出错信息位移CALLDISPLAY ;转子显示错信息;转子显示错信息RET ;返回;返回READOK:MOV CX,112 ;双面双密软盘目录数;双面双密软盘目录数NEXT:CMPBYTE PTRBX,0E5H ;是空目录标志;是空目录标志E5H吗吗JZ EMPTY ;是转;是转PUSHBX ;不是保护
48、;不是保护BXMOVDL,8 ;文件名主名长度;文件名主名长度PNAME: MOV AL,BX ;取文件名字符;取文件名字符CALLDISPCHAR ;显示;显示INCBX ;下一字符;下一字符DECDL ;字符数减;字符数减1JNZPNAME ;不够;不够8个转个转PNAME,够顺序执行够顺序执行MOVAL,.CALLDISPCHAR ;显显示示主主名名与与扩扩展展名名之之间间的的分分隔隔符符.MOVDL,3 ;扩展名长度;扩展名长度ENAME: MOV AL,BX ;取扩展名字符;取扩展名字符CALLDISPCHAR ;显示;显示INCBXDECDLJNZENAMEPOPBX ;恢复;恢复
49、BXMOV DL,8 ;空格数;空格数 BLANK:MOV AL, CALL DISPCHAR ;显示文件名间的;显示文件名间的DECDL ;8个空格个空格JNZBLANKINCNAMECOUNT ;文件名计数增;文件名计数增1CMP NAMECOUNT,92 ;满屏吗?;满屏吗?JNZEMPTY ;若不;若不,转转MOV AH,0 ;读键盘功能号;读键盘功能号INT16H ;BIOS键盘入键盘入,用户击键后继续用户击键后继续MOV NAMECOUNT,0 ;复原计数初值;复原计数初值EMPTY:ADD BX,32 ;指向下一目录项;指向下一目录项,每项每项32个字节个字节LOOPNEXT ;
50、不够;不够112个转,够顺序执行个转,够顺序执行 RET ;返回;返回DOSDISPLAY PROC NEAR ;显示信息子程序;显示信息子程序MOV CX,30 ;显示字符数;显示字符数DISP1: MOV AL,BX ;取字符;取字符CALL DISPCHAR ;转子显示;转子显示INCBXLOOPDISP1 ;做;做30次次MOV AL,0DH ;回车;回车CALL DISPCHARMOV AL,0AH ;换行;换行CALL DISPCHARRET ;返回;返回DISPLAYENDPDISPCHAR PROCNEAR;显示字符子程序;显示字符子程序PUSH BX ;保护;保护BXMOV
51、BX,0 MOV AH,14 ;写功能号;写功能号INT10H ;BIOS 视频功能调用视频功能调用POPBX ;恢复;恢复BXRET ;返回;返回DISPCHAR ENDPSTARTENDPCODEENDSENDSTARTSTAR: PUSH DSMOVAX,0PUSHAXMOVAX,DATAMOVDS,AXMOVAH,0MOVAL,13HINT10H ;设置为模式;设置为模式13HAGAIN: MOVBL,CUR-COLORMOVDX,SCR-COL;DX为像素点的为像素点的y坐标坐标MOV CX,SCR-LINE ;CX为像素点的为像素点的x坐标坐标CALL DRAW-POINT ;在(
52、;在(x,y)处画点)处画点MOV DX,SCR-COLMOV CX, SCR-LINECALL READ-POINT ;将(;将(x,y)处像素值读出)处像素值读出MOV DX,SCR-COLMOV CX, SCR-LINEADDDX,4;x+4为新点的为新点的x坐标坐标CALL DRAW-POINT ;在(;在(x+4,y)处画点)处画点INCSCR-LINE ;指向下一行;指向下一行INCSCR-COL ;指向右边的下一个点;指向右边的下一个点INCCUR-COLOR;指向下一种颜色;指向下一种颜色CMPSCR-LINE,200 ;200列做完了吗?列做完了吗?JEENDLINE ;做完
53、了,结束;做完了,结束JMPAGAIN ;没做完则重复;没做完则重复ENDLINE: RETMAIN ENDPDRAW-POINTPROCNEARPUSH ESCALL GET-ADDR ;计算偏移量,存在;计算偏移量,存在DI中中 MOV DX,0A000H ;显示缓冲区首址的段地址;显示缓冲区首址的段地址MOV ES,DXMOV DX,3CDHMOV AL,01000000BOUTDX,AL ;设显示缓冲区为线性内存结构;设显示缓冲区为线性内存结构MOV ES:DI,BL ;往显示缓冲区写数据;往显示缓冲区写数据POPESRETDRAW-POINTENDPREAD-POINTPROC NE
54、ARPUSH ESCALL GET-ADDR ;计算偏移量,存在;计算偏移量,存在DI中中MOV DX,0A000HMOV ES,DX;设显示缓冲区首址的段地址;设显示缓冲区首址的段地址MOV DX,3CDHMOV AL,01000000BOUTDX,AL;设显示缓冲区为线性内存结构;设显示缓冲区为线性内存结构MOV BL,ES:DI ;从显示缓冲区读值;从显示缓冲区读值POPESRETREAD-LINT ENDPGET-ADDR PROC NEARPUSH AXPUSH DXMOV AX,320 ;每行;每行320个点个点MUL CX ;乘以行号即;乘以行号即y320POPDXADDAX,2
55、X;即计算地址偏移量为;即计算地址偏移量为y320+xMOV DI,AX;偏移量送;偏移量送DIPOPAXRET GET-ADDR ENDP CODEENDSENDSTAR MOV AH,2INT10HJMPPRT1 ;再输入,再打印;再输入,再打印 EXIT:RET PRNTYENDP CODEENDSENDPRNTYP本章小结本章小结 对对外外设设进进行行控控制制,使使用用其其完完成成输输入入/ /输输出出工工作作。汇汇编编语语言言能能直直接接控控制制硬硬件件工工作作,因因此此成成为为编编写写高高性性能能输输入入/ /输输出出程程序序最最有有效效的的程程序设计语言。序设计语言。 本本章章在在中中断断调调用用指指令令的的基基础础上上详详细细讲讲解解了了BIOSBIOS中中断断调调用用和和DOSDOS系系统统功功能能调调用用的的使使用用方方法法。分分别别介介绍绍了了键键盘盘、显显示示器器、磁磁盘盘文文件件的的输输入入/ /输输出出方方法法,以以及及两两种种调调用用的的区区别别,并并举举例例说说明明了了常常见见的的输输入入/ /输输出出程程序序的的编编写写方方法法。在在今今后后如如果果用用到到中中断断调调用用的的其其他他功功能能,可可以以查看有关资料。查看有关资料。