第六章输入/输出和中断本章将介绍:1.输入输出指令;2.理解中断的概念,学会编写中断处理程序;3.WIN32编程。输入和输出指令思考的问题:(1)数据怎样在主机与外设之间是怎样传送的?(2)CPU是怎样访问外部设备?(3)外部设备是怎样与CPU一起工作的?I/O地址空间1.主存空间的回顾:主存是按照8位字节编址的,前面所学的指令、寻址方式都是对主存访问的;2.CPU对外部设备的访问是通过外部设备寄存器进行的;3.系统将所有的外部设备的寄存器进行统一的编址,通过这些地址去访问外部设备;4.所有的外部设备寄存器地址组成了I/O空间;5.I/O地址空间与内存地址空间的关系:(1)编址方式与主存相同,地址范围0000H~0FFFFH,共64K;(2)I/O空间只能由I/O指令访问(I/O指令可使I/O读写控制线有效),而对其它任何指令的访问一律视为无效。I/O地址空间与内存地址空间的对比图0H0FFFFHI/O地址空间:用I/O指令访问0H主存地址空间:用访内指令访问1.设备寄存器,又称为端口,具有如下的分类:(1)设备状态寄存器(状态端口):状态寄存器用来描述当前设备所处的工作状态;(2)设备控制寄存器(控制端口):存放为控制设备当前工作方式所需的信息;(3)数据寄存器(数据端口):暂存与CPU交换的数据。2.CPU对外部设备的访问:每个设备寄存器均需要分配一个I/O空间的地址(端口地址),这样才能被CPU的I/O指令直接访问。CPU地址总线数据总线控制总线主存地址译码主存单元外部设备状态端口I/O地址译码000000H┆FFFFFFFFH0000H┆0FFFFHI/O读写主存读写控制端口数据端口CPU、主存和外设之间关系示意图需要注意的问题:1.在PC系统主机中,每一台设备至少都有三种设备寄存器:(1)状态寄存器(状态端口)(2)控制寄存器(控制端口)(3)数据寄存器(数据端口)2.对于连在系统中的每台外设,相应的接口部件均有一组设备寄存器与之对应,不同设备所需设备寄存器的个数是不同的,功能也各不相同。3.编址问题:有的计算机系统中,设备寄存器与主存统一,例如:VAX系列机最高4K为设备寄存器,因而所有对主存访问的指令均可访问设备寄存器,并能作同样操作,简单、灵活、方便、功能强,但缩小了存贮空间。4.PC机采用端口寻址,即复盖编址方法,除主存空间地址0-0FFFFH外,另有I/O空间地址0-0FFFFH,它实际上是外部设备寄存器的集合,最大为64KB,编址方式与主存相同,与主存空间不同的是:它只能由专门的I/O指令访问I/O空间,而对前面所学的寻址方式和指令的访问一律视为无效。例如:并行打印机控制器数据寄存器378H状态寄存器379H选通位自动换行初始化位,正常为1允许中断选择位总为1控制寄存器37AH状态寄存器379H忙碌位(0:打印机忙,不能发数据给打印机)肯定,0:肯定脉冲1:正常输入纸,0:有纸1:无纸选择,0:未接机1:连机错误,0:错1:正常CPU对外设的控制,都是通过设备寄存器实现的,例如:只要改变状态寄存器或控制寄存器中某些位的值,就可达到对该设备进行操作和控制的目的。CPU外部设备输入输出输入/输出指令:1.从信息流向看,在80X86中,输入是指将外部设备数据寄存器中的数据送至累加器AL/AX/EAX中,由IN(INS)指令完成。2.输出是指将累加器AL/AX/EAX中的数据送至外设数据寄存器的过程,由OUT(OUTS)指令完成。┇AL/AX/EAX数据寄存器打印机┇AL/AX/EAX数据寄存器键盘OUTBUFINBUF说明:(1)设备寄存器地址大于255时,必须要用DX;(2)主存空间的寻址方式在此均不适用。1输入指令格式:INAL,设备寄存器地址INAL,DXINAX,设备寄存器地址INAX,DXINEAX,设备寄存器地址INEAX,DX其中,DX内容为设备寄存器地址。功能:将设备寄存器的内容→AL/AX/EAX,或([DX])→AL/AX/EAX例如:将打印机状态端口的内容→AL。MOVDX,379HINAL,DX……………41H00H……………0379H打印机端口地址379HDXAL打印机端口地址DX格式:OUT设备寄存器地址,ALOUTDX,ALOUT设备寄存器地址,AXOUTDX,AXOUT设备寄存器地址,EAXOUTDX,EAX其中,DX内容为设备寄存器地址功能:将(AL)/(AX)/(EAX)→设备寄存器。说明:(1)设备寄存器地址大于255时,必须要用DX;(2)主存空间的寻址方式在此均不适用。2输出指令什么是中断1.中断是CPU所具有的能打断当前执行的程序,转而为临时出现的事件服务,事后又能自动按要求恢复执行原来程序的一种功能;2.实现这种功能的软、硬件装置称中断系统;3.某事件的处理程序为中断处理程序,引起中断的事件称为中断源。现行程序某事件的处理程序响应随机发生事件处理结束返回断点┇K:……K1:……┇┇┇┇┇┇┇中断和子程序调用之间的区别:1.子程序的调用是CPU执行主程序时主动调用的结果;中断是CPU被动打断,从而转去处理引起中断的事件的过程;2.引起中断的外部事件的发生与CPU当前执行的指令之间没有明显的约束关系,而主程序和子程序之间有着密切的联系;3.外部中断是随机发生的。不可屏蔽中断NMI可屏蔽中断INTR除法出错溢出中断软中断单步中断外部中断内部中断中断源外部中断源:指中断原因来自CPU的外部6.2.2中断源分类中断逻辑除法出错溢出中断软中断单步中断中断控制器8259A打印机软驱INTR不可屏蔽中断请求NMICPUIBMPC中断源示意图中断与异常1.中断:外部中断一般具有随机发生的特点,一般把外部中断仍称作中断。2.异常:内部中断一般与CPU的状态和当前执行的指令有关,用于处理在执行指令过程中CPU检测到的异常情况,因此内部中断常称作异常。外部中断源:指中断原因来自CPU的外部,分为:1.不可屏蔽中断NMI(1)不可屏蔽中断主要由硬件故障引起,如:电源掉电,存贮器出错或总线奇偶校验错等;(2)这些错误如不及时响应和处理,机器难以正常工作;(3)对不可屏蔽中断发出的中断请求信号,CPU是不可拒绝的。2.可屏蔽中断源INTR(1)可屏蔽中断主要由各种外设请求中断而产生;(2)当CPU处于开中断状态(即IF=1)能响应外设中断请求;如关中断(IF=0)则拒绝外设中断请求。开中断指令:STI——将IF置1关中断指令:CLI——将IF清0异常:内部中断,来自CPU内部,其特点不需要外部硬件的支持,不受中断允许标志位IF的控制。1.除法出错:当除数为0或商超过了寄存器表示的范围,此时,产生一个类型号为0的异常。2.溢出:当溢出标志OF=1时,执行指令INTO将产生类型码为4的异常;如果OF=0,则不产生异常,继续执行INTO后面的指令。3.软中断指令INTnCPU执行“INTn”时立即产生中断,n为中断类型号,取值范围为:0~255。例:“INT21H”用来作DOS系统功能调用,每执行这条指令,便产生类型号为21H的中断,执行事先安排好的中断处理程序。4.调试异常(单步中断):若TF=1,则在每条指令执行后,自动产生类型号为1的中断,使程序单步执行,即DEBUG中的T命令。每执行一条指令中断一次,显示各寄存器及标志寄存器的内容,便于跟踪调试。80X86中断和异常的优先级1.CPU一次只能处理一个中断或异常,因此,如果在一条指令后有几个中断或异常同时向CPU提出服务请求,那么,CPU必须按照预先定义的优先级次序进行处理;2.CPU首先处理最高优先级的中断或异常,其它优先级较低的异常被废弃(中断返回时重发现),而优先级较低的中断则保持悬挂。中断/异常类型优先级除调试故障以外的异常异常指令INTO、INTn、INT3对当前指令的调试异常对下条指令的调试异常NMIINTR最高最低