《汇编语言程序设计》第8章输入、输出与中断.ppt

上传人:小飞机 文档编号:6527958 上传时间:2023-11-09 格式:PPT 页数:99 大小:643KB
返回 下载 相关 举报
《汇编语言程序设计》第8章输入、输出与中断.ppt_第1页
第1页 / 共99页
《汇编语言程序设计》第8章输入、输出与中断.ppt_第2页
第2页 / 共99页
《汇编语言程序设计》第8章输入、输出与中断.ppt_第3页
第3页 / 共99页
《汇编语言程序设计》第8章输入、输出与中断.ppt_第4页
第4页 / 共99页
《汇编语言程序设计》第8章输入、输出与中断.ppt_第5页
第5页 / 共99页
点击查看更多>>
资源描述

《《汇编语言程序设计》第8章输入、输出与中断.ppt》由会员分享,可在线阅读,更多相关《《汇编语言程序设计》第8章输入、输出与中断.ppt(99页珍藏版)》请在三一办公上搜索。

1、第八章,输入/输出与中断,第8章输入/输出与中断,8.1 输入/输出8.2 CPU与外设之间的数据传送方式8.3 中断8.4 DOS和BIOS中断调用,第8章输入/输出与中断,8.1 输入/输出8.2 CPU与外设之间的数据传送方式8.3 中断8.4 DOS和BIOS中断调用,8.1 输入/输出,I/O端口编址方式I/O端口寻址方式,I/O端口编址方式,8.1 输入/输出,独立编址:I.O端口有独立的地址空间,CPU使用不同的指令访问内存储器和I.O端口。统一编址:在系统中,内存储器和I.O端口的地址统一安排,二者没有重叠的地址空间,CPU使用相同的指令访问内存储器和I.O端口,由地址来确定访

2、问的是内存储器还是I.O端口。,I/O端口编址方式,8.1 输入/输出,独立编址:硬件系统复杂,但没有占用内存的地址空间。统一编址:硬件系统简单,可以利用丰富的存储器访问指令访问I.O设备,从而提高了程序设计的灵活性,但I.O设备占用了部分地址空间,减少了内存的地址空间。,I/O端口寻址方式,8.1 输入/输出,直接端口寻址间接端口寻址,I/O端口寻址方式,8.1 输入/输出,直接端口寻址IN AL,PORT;PORT端口内容读到AL累加器中IN AX,PORT;PORT+1和PORT端口内容读到AX累加器中OUT PORT,AL;将AL累加器中内容写到PORT端口OUT PORT,AX;将A

3、X累加器中内容写到PORT+1和PORT端口,I/O端口寻址方式,8.1 输入/输出,间接端口寻址MOV DX,PORT;PORT端口地址传送到间址寄存器DX中IN AL,DX;将以DX中内容为地址的I.O端口内容读到AL累加器中IN AX,DX;将以(DX+1、DX)中内容为地址的两个I.O端口内容读到AX累加器中OUT DX,AL;将AL累加器中内容写到以DX中内容为地址的I.O端口OUT DX,AX;将AX累加器中内容写到以(DX+1、DX)中内容为地址的两个I.O端口,第8章输入/输出与中断,8.1 输入/输出8.2 CPU与外设之间的数据传送方式8.3 中断8.4 DOS和BIOS中

4、断调用,8.2 CPU与外设之间的数据传送方式,程序控制方式中断处理方式直接存储器存取方式,程序控制方式,8.2 CPU与外设之间的数据传送方式,CPU通过读取端口状态寄存器的标志位来了解外设的工作状态,据此来决定对外设的访问。采用这种方法进行数据传送的方式称为程序控制方式,通常称作(程序)查询方式。,程序控制方式,8.2 CPU与外设之间的数据传送方式,8.1 访问外设的程序控制流程图,程序控制方式,8.2 CPU与外设之间的数据传送方式,在实际应用中,为防止因某种原因造成CPU处于死循环查询状态,可根据通常状态下设备转到就绪状态所需时间或人们的可容忍时间,在程序中设置一预定的循环次数值(超

5、时值),并安排超时检测程序段,如设备在该时间内未转到就绪状态,则CPU从循环查询状态中跳出,防止因为CPU处于死循环查询状态而使访问设备的程序不能正常运行。,程序控制方式,8.2 CPU与外设之间的数据传送方式,程序控制方式,8.2 CPU与外设之间的数据传送方式,例8.1 读微机中实时钟RT.CMOS,把读到的秒、分和时保存到变量中。CMOS RAM中相关各字节的含义见表8.1。,程序控制方式,8.2 CPU与外设之间的数据传送方式,分析:RT/CMOS RAM的状态寄存器A的位7是计时更新标志位,为1表示实时钟正在计时,为0表示实时钟信息可以读出。在读实时钟前,要判别该标志位是否为0。,程

6、序控制方式,8.2 CPU与外设之间的数据传送方式,程序控制方式,8.2 CPU与外设之间的数据传送方式,例8.2 利用查询方式打印一个字符。分析:利用查询方式打印一个字符的流程是:首先输入打印数据,随后读取打印机工作状态信息,判断打印机是否忙;如打印机不忙,向打印机发出选通命令;如打印机忙,则在规定的超时时间段内反复查询打印机工作状态信息,直到打印机不忙或超时结束,跳转到相应处去处理。,程序控制方式,8.2 CPU与外设之间的数据传送方式,程序控制方式,8.2 CPU与外设之间的数据传送方式,查询方式的优点:接口硬件简单、经济,且可用程序安排访问若干个外设的先后次序。查询方式的缺点:CPU与

7、外设只能串行工作,CPU在查询的时间段内只能与一台设备交换信息,且大部分时间处于空闲等待状态,浪费了原本可执行大量指令的时间。,中断处理方式,8.2 CPU与外设之间的数据传送方式,当CPU需要与外设进行数据交换时,向外设发出启动命令,然后CPU不必查询外设的工作状态,而是继续执行主程序。当外设准备就绪可以进行I.O操作时,向CPU发出中断申请,CPU暂停正在执行的程序(中断原程序),转去执行与外设之间的I.O操作,完成操作后即返回,继续执行被中断的程序。这种方式与查询方式相比,大大提高了CPU的工作效率,也提高了整个计算机系统的性能和效率。,直接存储器存取方式,8.2 CPU与外设之间的数据

8、传送方式,中断传送方式可以大大提高CPU的利用率,对磁盘、磁带等块设备、模数转换器(A.D)等高速I.O设备,在批量进行数据交换的情况下(如磁盘与内存间的信息交换),用执行输入输出指令的方法或使用中断方法来传输字节,就显得太慢。为了提高大批量数据传送的效率,引入了直接存储器存取方式(DMA)进行数据传送。通常情况下,系统的地址总线、数据总线及大部分控制总线是由CPU管理的。在采用DMA方式进行数据传送时,CPU让出对总线的控制权,用硬件DMA控制器接管对总线的控制权。在DMA控制器的控制下,不经CPU的干预而直接在外设与内存间进行批量数据的快速传送。,直接存储器存取方式,8.2 CPU与外设之

9、间的数据传送方式,完整的DMA数据传送过程必须经过下述4个步骤:(1)CPU对DMA控制器初始化,对I.O接口发出操作命令,I.O接口提出DMA请求。(2)DMA控制器接受I.O接口的DMA请求,向CPU发出总线请求信号HOLD。当CPU发出总线回答信号HLDA将总线让出后,DMA接管对总线的控制,进入DMA方式。DMA控制器通知I.O接口开始DMA数据传送。,直接存储器存取方式,8.2 CPU与外设之间的数据传送方式,(3)DMA控制器发出读写命令,直接控制内存与I.O间进行批量数据的快速传送:传输数据的存储器地址(在内存地址计数器中)通过地址总线发出;传输的数据字节在字计数器中;地址计数器

10、自动加l;字计数器自动减1;如字计数器非0,继续进行数据传送。(4)如字计数器变到0,则停止数据传送,向CPU发出中断请求,DMA控制器释放总线控制权,并向I.O接口发出结束信号,DMA数据传送过程结束。,第8章输入/输出与中断,8.1 输入/输出8.2 CPU与外设之间的数据传送方式8.3 中断8.4 DOS和BIOS中断调用,8.3 中断,中断的概念中断类型码中断向量表中断优先级中断处理过程,中断的概念,8.3 中断,中断就是计算机暂停执行当前程序,转而执行更紧急的程序,在执行结束后,自动返回到原程序暂停处继续执行的过程。一般把能够引起中断的事件或能够发出中断请求的来源称为中断源。在808

11、6/8088/80286/80386的中断系统中,最多能够处理256种中断,中断类型码(即中断类型号)为0到255。,中断类型码,8.3 中断,中断的类型:外中断内中断,中断类型码,8.3 中断,1.外中断外中断来自处理机的外部条件,如I.O设备或其他处理机等,以随机出现的方式中断CPU执行的现行程序而转向中断服务程序。外部中断通常用于指示I.O设备的一次操作已完成。外部中断主要有两个来源:一种是非屏蔽中断(NMI),另一种是来自各种外部设备的中断,称为可屏蔽中断。,中断类型码,8.3 中断,80X86有两根引脚INTR和NMI接受外部中断请求信号:IN-TR接受可屏蔽中断请求,NMI接受不可

12、屏蔽中断请求。一根引脚INTR只能直接引入一种外设中断。为了支持更多的外部硬件中断,在系统中采用了硬件:可编程中断控制器芯片8259A。每个8259A芯片可以支持8个中断请求信号,如果使用9个8259A芯片(一个主片,8个从片),就可使80X86CPU在单个引脚INTR上接受多达64个中断源的中断请求信号。,中断类型码,8.3 中断,CPU是否响应外设发出中断请求,由两个控制条件决定:一个是标志寄存器(FLAGS)中的IF中断允许标志位决定是否屏蔽可屏蔽中断请求。另一个是该外设的中断请求是否屏蔽,由8259A的中断屏蔽寄存器(IMR)决定。,中断类型码,8.3 中断,2.内中断内中断来自于CP

13、U内部,它包括下列类型:除法出错中断:当CPU执行除法指令DIV或IDIV时,如果除数等于0或者商太大,致使存放商的目标寄存器容纳不下,则产生此中断。中断类型号为0。注意:CPU执行除法指令FDIV时不产生此中断。单步执行中断:为调试程序(DEBUG)设置的中断,中断类型号为1。,中断类型码,8.3 中断,断点中断:为调试程序(DEBUG)设置的中断。INT3是一条特别的单字节指令,调试程序(DEBUG)可利用该指令支持程序断点。当由于执行INT3指令进入中断服务程序时,被保存的CS和IP指向紧跟INT3的指令,即INT3后面的字节。本中断不提供中断服务程序,中断类型号为3。溢出中断:只有当O

14、F=1时,正在执行INTO指令才产生中断,否则不产生中断,继续执行INTO后面的指令。在进入溢出中断服务程序时,被保存的CS和IP指向INTO指令的下一条指令。本中断不提供中断服务程序,中断类型号为4。指令中断INT n:用户程序使用的软中断,中断类型号n为10HFFH中的任一个。10H前的部分中断类型号也可使用,但一般很少用到。,中断向量表,8.3 中断,每种中断都用一个中断类型号来表示,每种类型的中断都由相应的中断服务程序来处理。中断向量表就是各种中断类型的中断服务程序的地址表,占用内存中从00000H003FFH的1K字节地址空间。中断向量表中的256项中断向量对应256种中断类型,每项

15、占4个字节,存放相应的中断服务程序的入口地址,高字存放入口地址的段地址部分,低字存放入口地址的偏移地址部分。,中断向量表,8.3 中断,中断向量表,8.3 中断,中断操作的5个步骤:(1)取中断类型号;(2)计算中断向量地址;(3)取中断向量,偏移地址送IP,段地址送CS;(4)转入中断服务程序;(5)中断返回到INT指令的下一条指令。,中断优先级,8.3 中断,80X86PC机规定的中断优先级次序:中断类型优先级内中断(0、3、4、软中断)最高NMI中断(2型中断)INTR中断单步中断(1型中断)最低,中断优先级,8.3 中断,在单片的8259A中断系统中,其优先级分为八级,在正常的优先级方

16、式下,优先级次序是IR0,IR1,IR2,IR3,IR4,IR5,IR6,IR7,定时器连接的IR0优先级最高,键盘连接的IR1其次,打印机连接的IR7优先级最低。在级联的8259A中断系统中,从片的8259A连接到主8259A的哪端上,整个从片的中断请求就具有哪端的中断优先级别。从片内部的中断优先级类似于主片。,中断优先级,8.3 中断,中断嵌套:当CPU在响应当前的中断请求的过程中,又被其他优先级更高的中断源中断,暂停执行当前正在运行的中断服务程序,转而去进行新的中断处理,这种重叠处理中断的现象叫做中断嵌套。一个正在执行的中断服务程序,在开中断(IF=1)的情况下,能被优先级高于它的中断源

17、中断。,中断优先级,8.3 中断,图8.4 中断处理过程示例,中断处理过程,8.3 中断,当中断发生时,不管是哪种中断源,80X86CPU完成下列动作:1.CPU将标志寄存器内容入栈。2.CPU将远程返回地址推入堆栈:先将当前代码段寄存器(CS)内容入栈,然后将当前指令计数器(IP)内容入栈。3.CPU判别中断源,取中断类型号N,把从中断向量表中地址4N处取得的字内容送IP,取4N+2中的字内容送CS。4.禁止外部中断和单步中断。5.CPU转去执行中断处理程序(又常称为中断服务程序)。,中断处理过程,8.3 中断,当CPU执行完中断服务程序,要返回到原程序断点处时,中断服务程序的结束指令必须是

18、IRET(中断返回)。该指令将远程返回地址和标志寄存器从堆栈中弹出。,中断处理过程,8.3 中断,中断服务程序的组成包括主程序和中断服务子程序两部分,中断处理过程,8.3 中断,主程序必须完成以下工作:(1)设置中断向量。保存原中断向量(INT21H的35H功能),设置新的中断向量(INT21H的25H功能)。(2)设置设备的中断屏蔽位。(3)设置CPU的中断允许位IF(开中断)。(4)在主程序结束之前,恢复原中断向量。,中断处理过程,8.3 中断,中断服务子程序的编写步骤:(1)保存寄存器内容。(2)如允许中断嵌套,开中断(STI)。(3)处理中断。(4)关中断。(5)发送中断结束命令(EO

19、I)给中断命令寄存器。(6)恢复寄存器内容。(7)返回被中断的程序(IRET)。,中断处理过程,8.3 中断,设置中断向量有两种方法:一种是直接在中断向量表中设置某类型的中断服务程序的入口地址;另一种是使用DOS的系统功能调用。,中断处理过程,8.3 中断,例如,为中断类型N设置中断向量:(方法一)直接在中断向量表中设置中断服务程序的入口地址MOV AX,0MOV ES,AXPUSHFCLIMOV BX,N*4MOV WORD PTR ES:BX,OFFSET INT DEALMOV WORD PTR ES:BX+2,SEG INT DEALPOPFINT DEAL:;中断服务程序 IRET;

20、中断服务程序结束,中断处理过程,8.3 中断,(方法二)DOS系统功能调用(21H)存取中断向量:设置中断向量:把由AL指定的中断类型的中断向量DS:DX放置在中断向量表中入口参数:AH=25HAL=中断类型号DS:DX=中断向量执行:INT21H取中断向量:把由AL指定的中断类型的中断向量从中断向量表中取到ES:BX中入口参数:AH=35HAL=中断类型号执行:INT21H返回值:ES:BX=中断向量,中断处理过程,8.3 中断,例8.3 按要求编写除数为0时的内中断(0型中断)服务程序。要求:程序执行除数为0的除法操作,产生除法出错中断,执行中断服务程序(ISR0)。它显示信息,询问用户是

21、退出程序还是继续运行。若键入“c”要求继续执行程序,则服务程序恢复所有寄存器内容并执行IRET返回主程序,此时除法操作的结果是无效的;若键入“q”要求退出,则使用INT21H的4CH功能从服务程序直接返回DOS。,中断处理过程,8.3 中断,说明:此程序分成两大部分初始化部分和中断处理部分。初始化部分(Init)设置新的0型中断向量,显示一条信息,然后完成终止和驻留后返回到DOS。这种结束并驻留使用INT21H的31H功能,它保留程序所占的内存后退出,使这些内存单元不被后来运行的应用程序破坏。,第8章输入/输出与中断,8.1 输入/输出8.2 CPU与外设之间的数据传送方式8.3 中断8.4

22、DOS和BIOS中断调用,8.4 DOS和BIOS中断调用,DOS(Disk Operating System)MS-DOS(PC-DOS)内包含了许多涉及设备驱动、目录和文件管理等的子程序,DOS的各种功能和命令就是通过调用这些子程序实现的。这些子程序是相对独立的程序模块并有各自的编号。编程人员利用汇编语言可方便地调用这些子程序,减少对系统硬件环境的考虑和依赖,从而精简应用程序的编写,同时又可使程序有良好的通用性。这些编号的可由编程人员调用的子程序就称为DOS功能调用或系统调用。,8.4 DOS和BIOS中断调用,DOS功能调用主要包括三个方面的子程序:基本I.O文件管理其他(包括内存管理、

23、置取时间、置取中断向量、终止程序等),8.4 DOS和BIOS中断调用,IBMBIO.COM是一个输入.输出设备处理程序,它提供了DOS到ROM BIOS的低级接口,完成将数据从外设读入内存,或把数据从内存写到外设去的工作。IBMDOS.COM包括一个文件管理程序和一些处理程序,在DOS下运行的程序可以调用这些处理程序。为了完成DOS功能调用,IBMDOS.COM把信息传送给IBMBIO.COM,形成一个或多个BIOS调用。DOS建立在BIOS的基础之上,通过BIOS控制硬件。,8.4 DOS和BIOS中断调用,图8.5 应用程序、DOS、BIOS和外设接口之间的关系,8.4 DOS和BIOS

24、中断调用,编程时常用的DOS中断调用:INT20H程序终止INT21H功能调用:键盘I.O(AH=1、6、7、8、A、B、C)显示器I.O(AH=2、6、9)打印机I.O(AH=5)串行通信I.O(AH=3、4),8.4 DOS和BIOS中断调用,DOS中断类型20程序终止27结束并驻留内存21功能调用28键盘忙循环22终止地址29快速写字符23Ctrl_C中断向量2A网络接口24严重错误向量2E执行命令25绝对磁盘读2F多路转接接口26绝对磁盘写303F保留给DOS,8.4 DOS和BIOS中断调用,BIOS是系统提供的基本输入输出例行程序,它直接建立在硬件基础之上,一般以在硬件系统中主板上

25、的ROM-BIOS(或EPROM、EEPROM)芯片形式出现。在存储器系统中,从地址0FE000H开始的8K ROM(只读存储器)中装有BIOS(Basic Iuput.Output System)例行程序。,8.4 DOS和BIOS中断调用,调用DOS或BIOS功能的几个基本步骤进行:(1)将调用参数装入指定的寄存器;(2)将功能号装入AH;(3)如需子功能号,把它装入AL;(4)按中断号调用DOS或BIOS中断;(5)检查返回参数是否正确。,8.4 DOS和BIOS中断调用,常用的BIOS中断调用:INT10H显示器I/OINT14H串行口I/OINT11H取设备信息INT16H键盘I/O

26、INT13H磁盘I/OINT17H打印机I/O,8.4 DOS和BIOS中断调用,图8.6 BIOS中断和DOS中断的关系,8.4 DOS和BIOS中断调用,键盘中断显示中断磁盘文件存取中断,键盘中断,8.4 DOS和BIOS中断调用,系统通过两类键盘中断程序与键盘发生关联:一类是硬件中断程序中断09H;另一类是软件中断程序中断16H。硬中断09H由按键动作引起,负责把键盘扫描码及ASCII码存入键盘缓冲区。软中断16H由应用程序调用,从键盘缓冲区取出按键产生的扫描码及ASCII码。,键盘中断,8.4 DOS和BIOS中断调用,当用户按键时,键盘接口会得到该按键的键盘扫描码,同时产生一个中断请

27、求。如果键盘中断是允许的(中断屏蔽字中的Bbit1为0),并且CPU处于开中断状态(IF=1),那么CPU通常就会响应中断请求,转入键盘硬件中断例行程序中断09H的中断服务程序。键盘中断服务程序首先从键盘接口取得代表被按键的扫描码,然后根据扫描码判别用户所按的键并做相应的处理。,键盘中断,8.4 DOS和BIOS中断调用,1.键盘缓冲区键盘缓冲区是一个容量为16个字的先进先出的环行队列,其结构和占用的内存区域如下:BUFF HEAD DW?;0040:001AHBUFF TAIL DW?;0040:001CHKB BUFFER DW 16 DUP(?);0040:001EH-003DHBUFF

28、 HEAD和BUFF TAIL是缓冲区的头指针和尾指针,当这两个指针相等时,表示缓冲区为空。由于缓冲区本身长16个字,而存放一个键的扫描码和对应的ASCII码需要占用一个字,因此,键盘缓冲区可实际存放15个键的扫描码和ASCII码。键盘中断服务程序把所键入的字符键或功能键的扫描码和对应的ASCII码(如为功能键,对应的ASCII码理解为0)依次存入键盘缓冲区。如缓冲区已满,则不再存入,而发出“嘟”的一声。,键盘中断,8.4 DOS和BIOS中断调用,2.键盘I.O程序的功能和调用方法ROM-BIOS的键盘I/O程序以16H号中断服务程序的形式存在,它属于软中断服务程序,供高层的应用程序调用。它

29、与硬中断09H的关系如上所述,是通过键盘缓冲区这个媒介物来传递扫描码及ASCII码。在调用键盘I/O程序时,把功能编号置入AH寄存器,然后发出中断指令“INT16H”。调用返回后,从有关寄存器中取得出口参数。,键盘中断,8.4 DOS和BIOS中断调用,表8.2 INT16H中断服务程序的基本功能,键盘中断,8.4 DOS和BIOS中断调用,例8.4 编制程序,完成如下功能:读键盘,把所按键显示出来,检测到按SHIFT键时,程序结束。调用键盘I.O程序的2号功能取得变换键状态字节,进而判断是否按下了SHIFT键。在调用0号功能读键盘之前,先调用2号功能判断键盘是否有键可读,否则会导致不能及时检

30、测到用户按下的SHIFT键。,键盘中断,8.4 DOS和BIOS中断调用,键盘中断,8.4 DOS和BIOS中断调用,3.DOS键盘功能调用,键盘中断,8.4 DOS和BIOS中断调用,表8.3 DOS21H中的键盘功能调用,键盘中断,8.4 DOS和BIOS中断调用,例8.5 编程完成如下功能:利用系统功能调用,将键盘输入的小写字母转换成大写字母,并输出显示,直到输入字符时停止输出。,键盘中断,8.4 DOS和BIOS中断调用,显示中断,8.4 DOS和BIOS中断调用,1.文本显示方式2.显示属性3.显示存储区(显存)4.显示I.O程序的功能和调用方法5.DOS显示功能调用,显示中断,8.

31、4 DOS和BIOS中断调用,1.文本显示方式80列25行左上角的坐标为(0,0),右下角的坐标是(79,24)每个字符在存储器中由两个连续的字节表示,一个字节保存ASCII码,另一个字节保存字符的属性。,显示中断,8.4 DOS和BIOS中断调用,2.显示属性在单色显示方式下,显示属性定义了闪烁、反相和高亮度等显示特性。在彩色显示方式下,属性还定义了前景色和背景色。,显示中断,8.4 DOS和BIOS中断调用,图8.7 彩色显示属性字节各位的定义,显示中断,8.4 DOS和BIOS中断调用,3.显示存储区(显存)通常为显示存储器安排的存储地址空间是0B8000H(彩显卡)或0B0000H(黑

32、白显卡),对应的内存区域就称为显示缓冲区。文本显示模式下,屏幕的每一个显示位置依次对应显示存储区中的两个字节。,显示中断,8.4 DOS和BIOS中断调用,显示中断,8.4 DOS和BIOS中断调用,在屏幕的左上角以黑底白字显示字符“a”:MOV AX,0B800HMOV DS,AXMOV BX,0MOV AL,aMOV AH,07HMOV BX,AX取得屏幕右下角所显示字符的代码及属性:MOV AX,0B800HMOV DS,AXMOV BX,(80*24+79)*2MOV AX,BX,显示中断,8.4 DOS和BIOS中断调用,4.显示I.O程序的功能和调用方法利用直接写屏方法,程序可实现

33、快速显示。但编程较复杂,并且最终的程序也与显示适配卡相关。所以,一般不采用直接写屏方法,而是调用BIOS提供的显示I.O程序INT10H中断服务程序。,显示中断,8.4 DOS和BIOS中断调用,例8.6 编制程序,调用显示I.O程序(INT10H BIOS中断程序)完成如下功能:在屏幕中间部位开出一个窗口,然后等待用户按键,把按键字符显示在窗口的最底行,当窗口底行显示满时,窗口内容就向上滚动一行;用户按Ctrl+C键时,结束运行。,显示中断,8.4 DOS和BIOS中断调用,5.DOS显示功能调用,表8.7 DOS21H中的显示功能调用,磁盘文件存取中断,8.4 DOS和BIOS中断调用,文

34、件就是存放在磁盘上的程序或数据。文件操作是编程中经常要用到的功能,读取运行参数、保存运行结果等都需要用到文件操作。DOS提供了两套文件管理方式:文件控制块方式(FCB-File Control Block)和文件句柄方式。,磁盘文件存取中断,8.4 DOS和BIOS中断调用,1.磁盘文件管理系统功能调用2.BIOS磁盘I.O程序的功能和调用方法3.中断INT13H的扩展功能4.绝对磁盘读写INT25H和INT26H,磁盘文件存取中断,8.4 DOS和BIOS中断调用,1.磁盘文件管理系统功能调用DOS提供的磁盘文件管理系统功能调用包括传统的文件管理及扩充的文件管理两部分。功能号39H以前的属于

35、传统的文件管理,其余的属于扩充的文件管理。传统的文件管理系统功能调用要用到内存中的两个数据区:文件控制块(FCB)和磁盘传输区(DTA)。FCB功能使程序员能够生成、打开、关闭和删除文件,并在这种文件的任意记录处读写记录。,磁盘文件存取中断,8.4 DOS和BIOS中断调用,FCB功能操作的缺点:(1)FCB占用用户内存空间。(2)FCB不支持树状文件结构(不可访问当前目录以外的文件)。(3)FCB不能提供网络环境下的文件锁定/共享或记录锁定功能。(4)使用FCB的文件读、写功能需要操作文件控制块以设置记录大小和记录号,除读、写调用本身以外,还要加上单独的MS-DOS功能调用去建立DTA地址。

36、(5)对于包含可变长度记录的文件,使用FCB作随机记录I.O非常不方便。(6)用于访问或生成带特殊属性(如隐式、只读或系统)文件的扩展文件控制块与CP.M不兼容。(7)FCB文件功能出错报告能力很差。(8)Microsoft不推荐使用类CP.M的调用。,磁盘文件存取中断,8.4 DOS和BIOS中断调用,扩充的文件管理系统功能调用从功能号39H开始,它是在DOS2.0及以后的版本中实现的,不再采用文件控制块(FCB),而使用文件句柄方式进行文件管理。使用句柄功能时,数据结构由操作系统在其拥有的内存空间中维护,应用程序不可访问。句柄功能完全支持树形目录结构的文件系统,允许程序员在任意磁盘驱动器中

37、的任何子目录中生成、关闭、打开文件,并在这类文件中的任意字节处读、写任意大小的记录。,磁盘文件存取中断,8.4 DOS和BIOS中断调用,使用扩充的文件管理系统功能调用,可给MS-DOS传送一个具有完整路径名(Path Name)的文件名字符串来打开或生成文件。该字符串给出了文件在树状文件结构中的位置(完整路径名)、文件名、扩展名,并且要以00H字节结束,该文件名字符串被称为ASCII-Z字符串。接收到该文件名字符串后,MS-DOS返回一个16Bit的文件句柄,由应用程序保存并在后面的操作中用它来指定文件。对于每一个打开的文件,系统功能调用还为其管理一个读写指针(Read.Write Poin

38、ter),读写指针总是指向文件中下一次要访问的字节位置,这个读写指针可以移动到文件的任意位置,能满足随机访问的要求。,磁盘文件存取中断,8.4 DOS和BIOS中断调用,使用句柄功能调用并发打开的文件及设备数受两个因素制约:一是系统中可并发打开的文件的最大数,该最大数的值在CONFIG.SYS文件中由FILES=nn指定,如未指定则由DOS操作系统默认值决定;另一个是单个进程并发打开文件的最大数是20,前提是系统文件打开表中尚有充足的项数可用。程序装入时,这20个句柄中的5个预先分配给了标准设备。标准设备不必打开就可直接使用它们的文件句柄,因为DOS已经预定义了它们的文件句柄:0=标准输入设备

39、;1=标准输出设备;2=标准错误输出设备;3=标准辅助设备;4=标准打印设备。,磁盘文件存取中断,8.4 DOS和BIOS中断调用,使用文件句柄方式进行文件管理的优缺点:优点:(1)句柄功能调用对于标准输入/输出设备提供I.O重定向和管道的直接支持。(2)句柄功能调用对树形目录结构的文件系统及特殊文件属性提供直接支持。(3)句柄功能调用支持网络环境下的文件共享.锁定和记录锁定。(4)使用句柄功能调用,程序员可把字符设备作为文件来使用。(5)句柄功能调用使对文件的随机记录访问非常方便。(6)句柄功能调用在MS-DOS下有较好的出错报告能力,在高版本下又得到进一步加强。(7)Microsoft公司

40、推荐使用句柄功能调用,便于程序与将来的MS-DOS环境兼容。缺点:可并发打开的文件数受限制。,磁盘文件存取中断,8.4 DOS和BIOS中断调用,使用句柄功能调用访问文件的一般步骤:(1)通过带缓冲的键盘输入系统功能(INT21H功能0AH)或通过程序段前缀获得用户给出的文件名。(2)在文件标识符后加一个0,以形成一个ASCII-Z字符串。(3)使用INT21H功能3DH及方式2(读.写访问)打开文件,或使用功能3CH生成文件(确保将寄存器CX设置为0,避免生成带有属性的文件)。保存返回的句柄。(4)使用INT21H功能42H建立文件指针。(5)读文件(功能3FH)或写文件(功能40H)。实际

41、传送的字节数在AX中返回。(6)如果未结束,转第(4)步,否则,关闭文件(功能3EH),程序正常退出(除功能31H结束并驻留),关闭所有活动的句柄。,磁盘文件存取中断,8.4 DOS和BIOS中断调用,例8.7 使用句柄功能调用中的文件和记录功能,对一个输入文件执行顺序读操作,将其内容写到一个输出文件中。,磁盘文件存取中断,8.4 DOS和BIOS中断调用,2.BIOS磁盘I.O程序的功能和调用方法ROM-BIOS的磁盘I.O程序以13H号软件中断服务程序INT13H的形式存在,它给用户程序提供了几种不同的低层磁盘服务:复位磁盘系统、获取磁盘状态、读.写.验证磁盘扇区、格式化磁道和其他更多的功

42、能。它不能像DOS系统功能调用INT21H那样直接支持对记录、文件、目录进行操作,而是通过CHS(Cylinders柱面、Heads磁头、Sectors扇区)来供应用程序直接访问磁盘扇区中的数据。,磁盘文件存取中断,8.4 DOS和BIOS中断调用,在调用磁盘INT13H软中断服务程序时,把功能编号置入AH寄存器,然后发出中断指令“INT13H”。,磁盘文件存取中断,8.4 DOS和BIOS中断调用,在读、写和检验磁盘扇区之前,应先把下列寄存器初始化:AH=要执行的操作:读、写、检验或格式化AL=扇区数CH=10位柱面号的低8位CL=(b7 b6):10位柱面号的高2位(b5 b0):扇区号(

43、从1起始)DH=磁头号(从0起始)DL=驱动器号:0=软驱A,1=软驱B,80H=硬盘A,81H=硬盘BES:BX=数据区中I/O缓冲区的地址(检验操作=格式化参数区表地址)调用返回后,从有关寄存器中取得出口参数。,磁盘文件存取中断,8.4 DOS和BIOS中断调用,3.中断INT13H的扩展功能由于旧的INT13H中断只能采用10位二进制数来表示柱面,所以无法读写大于8.4G的硬盘。扩展INT13H又称为INT13H扩展API,主要是用来对超过1024个柱面的硬盘进行读写的。在扩展INT13H调用中,驱动器号80H0FFH之间还包括一些新出现的可移动驱动器,比如活动硬盘等,这些驱动器支持先进

44、的锁定、解锁等功能。,磁盘文件存取中断,8.4 DOS和BIOS中断调用,4.绝对磁盘读写INT25H和INT26HDOS的可调用中断INT25H和INT26H是进行绝对磁盘读写的软中断,它建立在INT13H之上。此功能给程序员提供了一种直接读写磁盘扇区的方法。绝对磁盘读写操作把一个磁盘扇区作为一个记录,可以直接存取一个扇区或几个扇区。读写的磁盘位置是根据“逻辑扇区号”来寻址的。要访问DOS分区以外的扇区,只能使用BIOS的INT13H调用,DOS的INT21H、INT25H和INT26H是无法实现的。在编写程序时要注意:INT25H.INT26H破坏了除段寄存器外所有寄存器的内容,它用进位标志位来表示操作是否成功。绝对磁盘读写操作还把标志寄存器入栈,因此在程序执行完INT25H.INT26H调用后,在检验完CF后,要将标志寄存器从堆栈中取出。,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号