《【教学课件】第9章输入输出和中断程序设计.ppt》由会员分享,可在线阅读,更多相关《【教学课件】第9章输入输出和中断程序设计.ppt(73页珍藏版)》请在三一办公上搜索。
1、第9章 输入输出和中断程序设计,基本内容,输入输出指令查询传送方式中断概述中断处理程序设计BIOS功能调用,9.1 输入输出指令,I/O端口地址的分配I/O指令数据传送方式,9.1.1 I/O端口地址的分配,计算机系统通过接口与外围设备通信的,每个接口由一组寄存器组成,为了存取这些寄存器中的数据,系统为这些寄存器分配有专门的地址,即I/O端口地址。在80X86微机中,I/O端口地址是一个连续的独立的地址空间,范围从0000H FFFFH,共64KB,因此允许设置64K个8位端口或32K个16位端口.但实际中,由于系统的外围设备数量有限,只使用这些I/O端口地址的很小一部分。下表列出80X86微
2、机的常见外设的I/O端口地址。,部分I/O端口地址分配情况,9.1.2 I/O指令,对于I/O设备与内存独立编址的系统,有专门的I/O指令实现I/O设备与系统的通信,存取端口寄存器,完成输入输出.输入指令 输出指令,输入指令,输入指令从一个输入端口读取一个字或字节,传送至寄存器AL或AX中,有直接寻址和间接寻址 两种方式,直接寻址方式的端口地址是一个范围 0 255的立即数.间接寻址方式的端口地址在DX 寄存器中,地址范围0-65535。,例:下面两条指令分别表示从端口26H读取一个字和一个字节。IN AX,26H IN AL,26H,当端口地址超过255时,必须采用后两种间接寻址方式.例:下
3、面两条表示分别从端口2FAH和2FBH输入一个字节 送AL和AH.MOV DX,2FAH IN AX,DX,输出指令,输出指令将AL中的一个字节或AX中的一个字输出 到指定端口,有直接寻址和间接寻址两种方式。直接寻 址方式的端口地址是0 255之间的立即数;间接寻址方式的端口地址(范围0 65535)放在DX中。,例:OUT 8,AX表示从AX寄存器输出一个字到8号端口。,例:MOV AX,6F24H MOV DX,2FDH OUT DX,AX表示将24H输出至端口2FDH,将6FH输出至端口2FEH。,9.1.3 数据传送方式,无条件传送方式 查询方式 中断方式 直接存储器存取(DMA)方式
4、,无条件传送方式,微机系统中,有些简单的I/O设备在工作时,随时都准备好向CPU传送数据或准备好接收CPU的输出数据。也就是说,在工作中,系统不需要查询这些设备的状态,可以直接使用指令IN或OUT实现数据交换。这种方式实现简单,但在CPU与这些设备交换数据时,数据交换与指令的执行必须同步,否则就可能出错。,查询方式,查询方式适用于与CPU不同 步的I/O设备。,查询方式的工作过程是:如CPU要从 I/O设备接收数据,先查询I/O设备状态,看数据是否准备好,如果没有准备好则继续查询;如数据已准备好,CPU就从该设备读取数据,之后,CPU向该I/O设备发送响应信号,表示数据已被接收。I/O设备在收
5、到响应信号后,开始准备下一个数据的准备。,Y,中断方式,用中断方式传送数据,可提高CPU效率,并 对一些状态进行实时响应。,直接存储器存取方式,直接存储器存取方式适用于高速I/O设备与CPU之间的高 速数据交换。其工作过程如下:(1)I/O设备向DMA控制器发出DMA传送请求;(2)DMA控制器向CPU发出HOLD信号,向CPU提出DMA请求;(3)CPU向DMA控制器发出响应信号,将总线控制权交与 DMA控制器;(4)DMA控制器控制总线并向I/O设备发出DMA应答信号;(5)DMA控制器分别通过地址总线和数据总线送出传输 数据的存储器地址和要传输的数据;(6)数据传送完毕,DMA控制器通过
6、HOLD撤消对CPU的 DMA请求。,9.2 查询传送方式,查询方式的基本思想是:CPU主动地通过输入输出 指令查询指定I/O设备的当前状态,若设备准备就绪,则 立即与设备进行数据交换,否则循环查询。因此,查询传送方式要求相应的I/O接口除了要有数 据寄存器外,还要有状态寄存器,有些I/O设备还要有控 制寄存器。,9.3 中断概述,中断的概念中断源及中断分类中断向量表中断响应过程中断优先级和中断嵌套中断指令,9.3.1 中断的概念,中断是一种使CPU中止正在执行的程序而转去处理 特殊事件的操作。具体说就是在CPU执行程序的过程中,需要对外设进行输入输出操作,或由于某种事件发生,强迫CPU暂停当
7、前执行的程序,转去执行输入输出操作 或对该事件进行处理,当完成输入输出操作或处理事件 结束,CPU又返回到原来的程序,接着中止前的状态继 续执行。,9.3.2 中断源及中断分类,引起中断的事件就称为中断源。中断可分为内部中断和外部中断。内部中断又称软件中断。内部中断的中断事件是 由系统内部产生的,如CPU运算时,商超出寄存器所表 示的范围,或程序中有软件中断指令等都是内部中断。外部中断又称为硬件中断。外部中断是由外设控 制器等外部条件产生的中断,如某些设备出现故障,某 些I/O设备请求输入输出数据等.均可产生中断。,内部中断,主要有以下5种(1)除法错中断 在执行除法指令时,如果商超过了寄存器
8、所能表示的范围或除数为0,则立即产生一个类型为0的中断。(2)溢出中断 CPU在进行算术运算时,如发生溢出,则将溢出标志OF置1,此时指令INTO中断发生溢出的算术操作,其中断类型号为4;如果OF为0,INTO指令不产生中断。(3)指令INT产生的中断 可以用INT n指令产生内部中断,CPU执行此指令时,立即产生中断,根据中断类型号n调用系统中相应的中断处理程序。,(4)单步中断 单步中断是为程序调试设置的.CPU每执行完一条 指令都要检测陷阱状态标志TF,如果TF为1,CPU产生类 型号为1的中断,即单步中断.单步中断使CPU一次执行一条指令,程序调试过程 中,通过单步中断可以看出每条指令
9、执行后,寄存器和 存储单元的变化。(5)断点中断 断点中断也是为程序调试设置的。调试程序时,可 以根据功能不同将程序分为几个程序段,每段设置一 个断点,CPU执行到断点时产生类型为3的中断。,外部中断,外部中断包括非屏蔽中断NMI和可屏蔽中断INTR。非屏蔽中断不受中断标志位IF的影响,CPU不能禁 止非屏蔽中断.当NMI请求发生,CPU在一条指令执行结 束后,将对它作出响应。非屏蔽中断主要用于一些紧急 故障处理,如电源掉电、内存的奇偶错等。,可屏蔽中断常用于外设的中断处理,这些设备通过可编程中断控制器8259A与CPU相连,可编程中断控制器8259A通过中断请求输入端接收外设的中断请求信号,
10、并将相应的中断类型号提供给CPU。CPU是否响应外设的中断请求取决于两个条件:一是外设的中断请求是否被屏蔽;二是CPU是否被允许响应中断。其中第一个条件是由可屏蔽中断控制器8259A的中断屏蔽寄存器(如下图)控制的,中断屏蔽寄存器的端口地址为21H,它的某位为0,则表示允许该位对应的外设的中断请求。第二个条件是由标志寄存器的中断标志位IF控制的,该位为1,允许CPU响应外设的中断请求,即处于开中断状态。,用OUT指令设置中断屏蔽寄存器;用STI(IF=1)指令和CLI(IF=0)指令对中断标志位IF进行设置和清除。,打印机,软盘,硬盘,串行口2,定时器,键盘,保留,串行口1,D7 D6 D5
11、D4 D3 D2 D1 D0,中断屏蔽寄存器,9.3.3 中断向量表,每个中断源对应一个中断处理程序,每个中断处 理程序对应着一个中断类型号,80X86中断系统可处理 256种类型的中断,对应的类型号为0 0FFH。为处理方便,把所有256种中断处理程序的入口地址都集中放在一起,形成一张表,即中断向量表(如下图)。中断向量表中的每一项占用4个字节,其中高地址的两个字节存放中断处理程序的段地址,低地址的两个字节存放中断处理程序的偏移地址。中断向量表所占空间为1K(256*4)字节,系统将存储器的地址范围从0000H 3FFH的1K字节用来建立中断向量表,顺序存放256个中断向量。,中断向量表,0
12、03FCH,0000CH,00008H,00004H,00000H,9.3.4 中断响应过程,当中断发生时,硬件完成以下操作:(1)取中断类型号n;(2)将标志寄存器内容压栈;(3)当前代码段寄存器(CS)内容和指令计数器(IP)内容入栈;(4)置标志位IF和TF为0,禁止外部中断和单步中断(5)从中断向量表中取4*n地址(16位)的内容送IP,取4*n+2地址(16位)的内容送CS;(6)执行中断处理程序。,9.3.5 中断优先级和中断嵌套,中断优先级指多个中断源同时向CPU请求中断时,CPU响应中断的优先顺序。80X86系统为各种中断源规定了一个中断优先级次序,当多个中断源同时申请中断时,
13、CPU按从优先级高到优先级低的顺序依次处理各中断源的中断请求。,中断优先级,80X86系统的中断优先级次序是:优先级高 内部中断(除单步中断、断点中断外)非屏蔽中断 可屏蔽中断 低 单步中断,其中可屏蔽中断的优先级又分为IR0,IR1,IR2,IR3,IR4,IR5,IR6,IR7等8级,IR0,IR1,IR2,IR3,IR4,IR5,IR6,IR7即为正常的优先级方式下的优先级次序。,各外设的中断优先权对应哪一级由硬件连线和可编 程中断控制器8259A的中断命令寄存器(下页图)决定。中断命令寄存器中的端口地址为20H,其中D7位(R)为优先级循环控制位,R=1为循环优先级;R=0为固定优 先
14、级。D0 D2位(L0 L2)为系统最低优先级编码,用这三位指定哪个中断请求的优先级最低。D5位(L5)是中断结束位,当EOI位为1时,当前正在处理的中断请求将被清除。D6位(SL)用于选择L2、L1、L0编码。,D7 D6 D5 D4 D3 D2 D1 D0,中断命令寄存器,如要使中断优先级依次循环到IR6为最低优先级,即优先级优先级顺序为:IR7 IR0IR1 IR2 IR3 IR4 IR5 IR6,则需送命令码11100110到端口20H。,中断嵌套是指正在运行的中断处理程序,又被其它 中断源中断。,中断嵌套,从中断的响应过程知道,当CPU响应一个中断时,总是自动将IF和TF位置0,即先
15、关中断,禁止任何外设新的中断请求。为了实现多级中断处理,允许在中断处理程序执行过程中发生新的中断,则必须用指令STI开中断,将标志寄存器中的IF标志置1,以允许响应高级的中断源的中断请求,实现中断嵌套。,中断嵌套示意图如下所示,9.3.6 中断指令,1.中断指令INT 格式:INT n 功能:转到并执行相应中断处理程序,n是中断类型号范围 0 0FFH。执行该指令过程中,先进行现场保护,再执行相应的中断处理程序。,如执行中断指令 INT 11H 后完成以下的相应动作:,(1)取出中断类型号11H;(2)标志寄存器(FLAGS)、CS、IP内容依次进栈;(3)置IF=0,TF=0;(4)从中断向
16、量表中取中断处理程序的入口地址11H*4=44H的字内容送IP寄存器,取11H*4+2=46H的字内容送CS寄存器。(5)执行相应的中断处理程序。,格式:IRET 功能:从中断服务程序返回主程序,保证被中断的 程序接着中断前的状态继续向下进行。主要是自动恢 复断点和标志寄存器的内容。需要注意的是:中断返回指令IRET能自动恢复断 点和标志寄存器的内容,而子程序返回指令不能恢复标志寄存器的内容。,2.中断返回指令IRET,9.4 中断处理程序的设计,中断处理程序的基本结构设置和获取中断向量中断设计程序举例,9.4.1 中断处理程序的基本结构,中断处理程序的基本结构是:入口地址:其结构为中断处理程
17、序过程名 PROC 属性;现场保护:中断处理程序中要重新赋值的寄存器的原有内容都必须进行保护,保护的一般方法是压栈;处理中断;恢复现场:依次恢复被保护寄存器的原有内容;中断返回:用IRET实现中断返回。需要注意的是,外设中断处理程序和软中断处理程序是有区别的。在开中断(IF=1)的情况下,外设中断是随机发生的,而软中断是在CPU执行了中断指令后发生的,所以其对应的中断处理程序的基本结构也有所不同。,中断处理程序基本结构的一般程序如下:,INTRS PROC FAR PUSH DS;现场保护 PUSH AX PUSH DX PUSH DI STI;开中断 CLI;关中断 MOV AL,20H,O
18、UT 20H,AL;送EOI至20H号端口(8259A 的中断命令寄存器)POP DI;恢复现场 POP DXPOP AXPOP DSSTI;开中断IRET;中断返回INTRS ENDP,9.4.2 设置和获取中断向量,1.设置中断向量 设置中断向量有直接写入法和DOS功能调用两种方法。(1)直接写入 例:用直接写入的方法设置中断向量 设某外设中断处理子程序为:INTRN PROC NEAR STI IRET INTRN ENDP,将该中断处理程序的中断类型号设为N:MOV AX,0MOV DS,AX;段地址0000HMOV BX,4*N;设置中断向量CLI;关中断MOV AX,OFFSET
19、INTRN;中断处理程序的偏移地址MOV ES:WORD PTR BX,AXMOV AX,SEG INTRN;中断处理程序的段地址MOV ES:WORD PTRBX+2,AXSTI;开中断,功能:将由AL指定的中断类型的中断向量DS:DX放在中断向量表中。预置:AH=25H AL=中断类型号 DS:DX=中断向量 执行:INT 21H,(2)DOS功能调用法,例:用DOS功能调用法设置中断向量,MOV DX,OFFSET INTRN;中断处理程序的偏移地址MOV AX,SEG INTRN;中断处理程序的段地址MOV DS,AXMOV AH,25HMOV AL,N;中断类型号NINT 21H,2
20、.获取中断向量 获取中断向量有直接读取和DOS功能调用两种方法。(1)直接读取 例:用直接读取法读取中断类型号为N的中断向量,并保存至字变量DUBWORD开始的4个存储单元中。XOR AX,AX MOV ES,AX MOV AX,ES:N*4;取中断处理程序偏移地址 MOV WORD PTR DUBWORD,AX;保存 MOV AX,ES:N*4+2;取中断处理程序段地址 MOV WORD PTR DUBWORD+2,AX;保存,(2)DOS功能调用法,功能:读取指定中断的中断向量,ES=中断处理程序的段地址 BX=中断处理程序的偏移地址 预置:AL=中断类型号 执行:INT 21H 例:用D
21、OS功能调用实现前例功能。MOV AH,35H MOV AL,N;中断类型号 INT 21H MOV WORD PTR DUBWORD,ES;中断处理程序的段地址 MOV WORD PTR DUBWORD,BX;中断处理程序的偏移地址,9.4.3 中断设计程序举例,例:存储器中首地址为BUFFER的缓冲区中存放一串 ASCII码字符,下面的程序完成如下功能:在主程序 运行期间,每5秒钟响铃一次,当键盘上的某个键按 下时,主程序和响铃被挂起,显示器显示BUFFER缓 冲区中的字符串,然后等待下一次按键引起的键盘中断,当键盘中断发生后,恢复主程序和响铃。,DSEG SEGMENTCOUNT DW
22、1FLAG DB 0 MESS DB CLOSE RING!,0DH,0AH DB PRESS END TO EXIT,0DH,0AH,$DSEG ENDSCSEG SEGMENTMAIN PROC FAR ASSUME CS:CSEG,DS:DSEG,ES:DSEGSTART:PUSH DS SUB AX,AX PUSH AX,MOV AX,DSEG MOV DS,AX MOV AL,1CH MOV AH,35H INT 21H PUSH ES PUSH BX PUSH DS MOV DX,OFFSET RING MOV AX,SEG RING MOV DS,AX MOV AL,1CH MO
23、V AH,25H INT 21H,POP DS MOV AL,9 MOV AH,35H INT 21H PUSH ES PUSH BX PUSH DS MOV DX,OFFSET KBD MOV AX,SEG KBD MOV DS,AX MOV AL,9 MOV AH,25H INT 21H POP DS,IN AL,21H AND AL,11111100B OUT 21H,AL STIDELAY1:MOV CX,0DELAY:LOOP DELAY IN AL,60H AND AL,7FH CMP AL,4FH JE EXIT JMP DELAY1EXIT:POP DX POP DS MOV
24、AL,9 MOV AH,25H,INT 21H POP DX POP DS MOV AL,1CH MOV AH,25H INT 21H RETMAIN ENDPRING PROC NEAR PUSH DS PUSH AX PUSH CX PUSH DX MOV AX,DSEG MOV DS,AX,STI DEC COUNT JNZ EXIT1 MOV DX,200 IN AL,61H AND AL,0FCHSOUND:XOR AL,02 OUT 61H,AL MOV CX,0H WAIT1:LOOP WAIT1 DEC DX JNE SOUND MOV COUNT,91 EXIT1:POP D
25、X,POP CX POP AX POP DS IRETRING ENDPKBD PROC NEAR IN AL,60H TEST AL,80H JNZ INKRET XOR FLAG,1 CMP FLAG,1 JE PROCESS1 PROCESS2:IN AL,21H AND AL,0FCH OUT 21H,AL,JMP SHORT INKRETPROCESS1:IN AL,21H OR AL,01 OUT 21H,AL LEA DX,MESS MOV AH,9 INT 21HINKRET:MOV AL,20H OUT 20H,AL STI,IRETKBD ENDPCSEG ENDS END
26、 START,9.5 BIOS 功能调用,BIOS即Basic Input/Output System(基本输入/输出系统)的缩写,是固化在ROM中的程序,包含基 本输入/输出程序、系统信息设置、开机上电自检程 序和系统自举程序等常用例行程序。BIOS可分为3个 功能模块:自检及初始化模块、程序处理模块和硬件中 断模块。,9.5.1 键盘I/O中断,扫描码和键盘缓冲区 键盘上的每个键对应一个扫描码,从01H(Esc)到 53H(Del),这样根据扫描码可以唯一确定每个按键状态 的变化。当用户按键时,键盘接口就会得到该按键的扫 描码,同时会产生一个中断请求。如果键盘中断是允许 的,即中断屏蔽寄存
27、器(端口地址21H)第1位为0,并 且CPU处于开中断状态(IF=1),这时CPU就会响应该中 断请求,转入9号中断处理程序,即键盘中断处理程序。,键盘中的键可以分为五种类型:字符键(数字、符号 等),功能键(F1,HOME等),控制键(Ctrl.Alt和Shift 键),双态键(Caps Lock等)和特殊请求键。键盘中断处 理程序对这五种键的处理方法是:首先检测所按键是否是控 制键或双态键,如果是控制键或双态键,就设置有关标志,因为这些键将影响对后面按键操作的解释。如果按的是功能 键,就根据键盘扫描码和是否按下某些控制键(如Ctrl键)确定系统扫描码,将系统扫描码和一个全0字节一起存入键
28、盘缓冲区。如果用户按的是字符键,就根据键盘扫描码和是 否按下某些控制键(如Shift键)确定系统扫描码,并得出 对应的ASCII码,把系统扫描码和ASCII码一起存入键盘缓冲区。,键盘缓冲区是一个先进先出的循环队列:BUFF_HEAD DW?;键盘缓冲区首地址 BUFF_TALL DW?;键盘缓冲区末地址 KB_BUFFER DW 16 DUP(?);16个字长空间 其中BUFF_HEAD和 BUFF_TALL是缓冲区的两个地址指 针,当这两个指针相等时,表示缓冲区为空。键盘中 断处理程序把所按键的扫描码和对应的ASCII码依次存 入键盘缓冲区,如果缓冲区已满,则不再存入,这时 如果按下一个键
29、,就会发出警报声。,键盘I/O程序,键盘中断处理程序将按键的扫描码和对应的ASCII 码依次存入键盘缓冲区后,当CPU要处理键盘输入时,就调用BIOS键盘I/O程序,将键盘缓冲区的字符和扫描 码按接收时的次序依次取出送CPU。16H号中断提供了 基本的键盘操作,根据AH内容的不同,可以完成3个不 同的功能(如下表)。,BIOS键盘中断(INT16),9.5.2 显示I/O中断,显示器通过显示适配器与微机相连,显示适配器 也称显示卡,是计算机与显示器的接口。目前的显示 适配器都支持两种显示方式:文本显示方式和图形显 示方式。而每一种显示方式又有多种显示模式。文本显示方式是以字符为单位显示的方式。
30、,字符显示属性,屏幕上显示的每个字符,在存储器中都有连续的 两个字节与它对应,其中一个字节存放该字符的ASCII 码,另一个字节存放该字符的显示属性。单色文本显 示时,属性定义了字符是否闪烁、是否反相显示、是 否加强亮度等显示特性。,下图给出单色文本显示属性字节各位的功能。其中D0D2位表示前景色,D4D6位表示背景色。,D7 D6 D5 D4 D3 D2 D1 D0,属性字节各位定义,下表给出了单色文本显示方式的属性及其显示效果。,彩色文本显示时,前景有16种颜色、背景有8种颜色可以选择。其属性字节各位的功能如下图:,彩色文本显示的属性字节,其中,R、G、B分别表示红、绿、蓝,I表示亮度,B
31、L表示闪烁。D4D6 3位确定背景的属性,闪烁只对前景属性有意义。,下表是彩色文本显示方式的颜色组合,彩色文本显示的颜色组合,BIOS显示中断,下面介绍10H号中断的基本功能。每个功能对 应一个编号,调用时根据需要将功能编号置入AH 中,设置好调用参数。调用返回后,从相应寄存 器中取出返回参数。下表是10H号中断的显示操作。,类型10H的功能调用,例:编一程序完成以下功能:程序运行后,在屏幕的第10行30列红底白字显示“INFORMATION”,接着以绿底蓝字和绿底红字相间显示“WORLD”,按任意键返回DOS。,DATA SEGMENTMSG1 DB INFORMATIONMSG1LEN E
32、QU$-MSG1MSG2 DB W,21H,O,24H,R,21H,L,24H,D,21HMSG2LEN EQU$-MSG2DATA ENDSSTACK1 SEGMENT PARA STACK DW 20H DUP(?)STACK1 ENDSCODE SEGMENT ASSUME CS:CODE,SS:STACK1,DS:DATA,START:MOV AX,DATA MOV DS,AX CALL CLRSCR CALL DISPLY1 CALL DISPLY2 CALL WAITKEY MOV AH,4CH INT 21HCLRSCR PROC MOV AH,06H MOV AL,0 MOV
33、CH,0 MOV CL,0 MOV DH,24H,MOV DL,79H MOV BH,07H INT 10H RETCLRSCR ENDPDISPLY1 PROC MOV AH,13H MOV AL,01H MOV BL,4FH MOV BP,SEG MSG1 MOV ES,BP MOV BP,OFFSET MSG1 MOV CX,MSG1LEN MOV DH,0AH MOV DL,1EH,MOV BH,0 INT 10H RETDISPLY1 ENDPDISPLY2 PROC MOV AH,13H MOV AL,03H MOV BP,SEG MSG2 MOV ES,BP MOV BP,OFF
34、SET MSG2 MOV CX,MSG2LEN MOV DH,0AH MOV DL,1EH+MSG1LEN INT 10H RETDISPLY2 ENDP,WAITKEY PROC MOV AH,07H INT 21H RETWAITKEY ENDPCODE ENDS END START,9.5.3 打印机I/O中断,BIOS提供的打印I/O程序以17H号中断处理程序存 在。系统可以连接多台打印机,用打印机号0、1、2选择打印机。下表列出17H号中断的功能调用。,17H号中断功能调用,打印机状态字节各位定义如下图,D7 D6 D5 D4 D3 D2 D1 D0,位0:1=超时位1、2:未用位3:1=I/O错位4:1=联机位5:1=纸尽位6:1=应答位7:0=忙碌,例:下面的程序段将打印字符串Printer is using。,LETTERS DB Printer is using LEN EQU$-LETTERS MOV SI OFFSET LETTERS MOV CX LENPRILE:MOV AH 0 MOV AL,SI MOV DX,0 INT 17H INC SI LOOP PRILE,