资源预览内容
第1页 / 共132页
第2页 / 共132页
第3页 / 共132页
第4页 / 共132页
第5页 / 共132页
第6页 / 共132页
第7页 / 共132页
第8页 / 共132页
第9页 / 共132页
第10页 / 共132页
亲,该文档总共132页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第九章第九章中中断断.1基本概念基本概念复习查询方式输入复习查询方式输入当外设数据未准备好时,当外设数据未准备好时,要不断查询,要不断查询,CPU效率低效率低读取状态信息读取状态信息数据准备好?数据准备好?从数据口读数据从数据口读数据NY2021/7/2211.中断方式示意中断方式示意(以输入中断为例以输入中断为例)数据数据中断请求中断请求中断响应中断响应数据数据断点断点现现行行程程序序中中断断服服务务子子程程序序现现行行程程序序输输入入设设备备输输入入接接口口启动启动CPU2021/7/2222.什么是中断什么是中断?CPU暂停执行现行程序暂停执行现行程序,转而处理随机事件转而处理随机事件,处理完处理完毕后再返回被中断的程序毕后再返回被中断的程序,这一全过程称为中断。这一全过程称为中断。3.中断源中断源能够引发能够引发CPU中断的信息源中断的信息源(1)外部中断源(硬件中断源)外部中断源(硬件中断源)。I/O设备设备如键盘、显示器、打印机如键盘、显示器、打印机。数据通道。数据通道如磁带、磁盘如磁带、磁盘。时钟。时钟如如82540#,由此引发的中断由此引发的中断。故障源。故障源如掉电、存贮器奇偶校验错如掉电、存贮器奇偶校验错(2)内部中断源(软件中断源)内部中断源(软件中断源)。执行。执行INT软件中断指令软件中断指令如执行指令如执行指令INT21H。CPU指令执行产生的异常指令执行产生的异常如被如被0除、单步执行除、单步执行2021/7/2234.中断系统中断系统为实现中断而采取的硬件,软件措施为实现中断而采取的硬件,软件措施5.中断系统应具备的基本功能中断系统应具备的基本功能对于硬件中断对于硬件中断,接口电路中应具备接口电路中应具备屏蔽屏蔽和和开开放放的功能的功能,这种功能由程序员通过软件去控制。这种功能由程序员通过软件去控制。2021/7/224能实现中断判优(中断排队),能实现中断判优(中断排队),当有多个中断源提出当有多个中断源提出请求时请求时,应能优先响应高级别的中断源。应能优先响应高级别的中断源。 能够实现中断嵌套能够实现中断嵌套,即高级别的中断源能够中断低级即高级别的中断源能够中断低级别的中断服务程序。别的中断服务程序。 响应中断后,能自动转入中断处理,处理完毕能自动返回断点响应中断后,能自动转入中断处理,处理完毕能自动返回断点现现行行程程序序断点断点A设备中断设备中断为为B服服务务B设备中断设备中断为为A服服务务设设“B”级别级别高于高于“A”断点断点为为A服服务务2021/7/2256.具有中断请求功能的输入接口示意图具有中断请求功能的输入接口示意图(教材教材P169)输输入入设设备备锁锁存存器器(8)三态三态缓冲缓冲器器(8)CPU数据线数据线RDQ+5V中断请求中断请求触发器触发器QD中断允许触发器中断允许触发器数据线数据线D0位位地址译码器地址译码器INTR地址总线地址总线IOWIOR控制口选中控制口选中数据口选中数据口选中选通信号选通信号2021/7/226.280X86中断指令中断指令1.开中断指令开中断指令STI功能:使功能:使F寄存器中寄存器中I标志置标志置1,CPU处于开中断状态。处于开中断状态。2.关中断指令关中断指令CLI功能:使功能:使F寄存器中寄存器中I标志置标志置1,CPU处于关中断状态。处于关中断状态。3.软件中断指令软件中断指令INTnn为中断类型码为中断类型码,n为为0255之间有定义的无符号整数。之间有定义的无符号整数。功能:无条件转向功能:无条件转向n型中断服务子程序。型中断服务子程序。2021/7/227INTn指令的执行过程指令的执行过程CPU响应软件中断的过程响应软件中断的过程F寄存器寄存器栈栈(保存保存INTn之前的之前的F状态状态)使使F中的中的T标志置标志置0禁止单步操作禁止单步操作I标志置标志置0CPU处于关中断状态处于关中断状态断口地址断口地址栈栈先:断口基地址先:断口基地址(CS)栈,后:断口偏移地址栈,后:断口偏移地址(IP)栈栈CPU从从4n4n+3单元取出单元取出n型服务程序入口地址型服务程序入口地址IP:CS,从而转入从而转入n型中断服务程序。型中断服务程序。2021/7/2284.中断返回指令中断返回指令IRET功能:依次从栈顶弹出功能:依次从栈顶弹出6个元素个元素IP,CS,F如果栈顶是如果栈顶是INTn的断口地址,则执行的断口地址,则执行IRET后,返回断点,否则不能。后,返回断点,否则不能。图示图示执行执行INTn栈顶示意图栈顶示意图执行执行IRET示意图示意图sp断口偏移地址断口偏移地址断口段基址断口段基址FCSFIPsp2021/7/229 IRET是中断服务子程序的出口指令是中断服务子程序的出口指令 IRET和和RET的区别的区别IRET从栈顶弹出从栈顶弹出6个元素个元素IP,CS,F远程远程RET,从栈顶弹出从栈顶弹出4个元素个元素IP,CS近程近程RET,从栈顶弹出从栈顶弹出2个元素个元素IP.中断向量和中断向量表中断向量和中断向量表中断系统是为实现中断而采取的软,硬件措施中断系统是为实现中断而采取的软,硬件措施中断指令,中断向量和中断向量表是实现中断的重要中断指令,中断向量和中断向量表是实现中断的重要软件措施。软件措施。2021/7/22101.什么是中断向量什么是中断向量2.中断向量是实模式下,中断服务子程序的中断向量是实模式下,中断服务子程序的入口地址入口地址2. 中断向量表:所有中断向量的集合所有中断向量的集合3.中断向量表的设置中断向量表的设置CPU规定规定:在实模式下,中断向量在实模式下,中断向量表需设置在系统的表需设置在系统的RAM最低端的最低端的1K单元(单元(03FFH)0H:4H:3FCH:0型中断向量型中断向量1型中断向量型中断向量255型中断向量型中断向量它由它由2部分组成部分组成: 服务程序所在代码段的段基址服务程序所在代码段的段基址2个字节个字节 服务程序入口的偏移地址服务程序入口的偏移地址2个字节个字节2021/7/22114.中断向量表的表地址与中断类型的关系中断向量表的表地址与中断类型的关系4n+0+2+3+1n型服务程序入口的偏移地址型服务程序入口的偏移地址n型服务程序入口的段基址型服务程序入口的段基址n型中断向量型中断向量如:如:“21H”型中断向量:存放在型中断向量:存放在84H87H单元中单元中问:问:9CH型中断向量存放在何处?型中断向量存放在何处?解解:9CH4=1001110000=270H9CH型中断向量存于型中断向量存于270H273H单元中单元中2021/7/22125.中断向量的引导作用中断向量的引导作用CPU响应软件中断的过程响应软件中断的过程YYXX21H型中断向量型中断向量421H用户程序用户程序MOVAH,1INT21HMOVDL,ALNEXT:F寄存器内容寄存器内容堆栈区堆栈区NEXT的有效地址的有效地址NEXT的段基址的段基址XX:YY21H型服务程序型服务程序IRETIPCSIPCSFIRET2021/7/22136.中断向量表的初始化中断向量表的初始化 由由BIOS设计的中断服务程序设计的中断服务程序(如如INT16H,INT10H)其中断向量在加电时由其中断向量在加电时由BIOS负责写入中断向量表。负责写入中断向量表。 由由DOS设计的中断服务程序设计的中断服务程序(如如INT21H)其中断向其中断向量是在启动量是在启动DOS时,由时,由DOS负责写入中断向量表。负责写入中断向量表。 用户程序开发的中断服务程序,由用户程序写入其用户程序开发的中断服务程序,由用户程序写入其中断向量。中断向量。2021/7/2214方法一、自己编写程序填写中断向量方法一、自己编写程序填写中断向量CLIPUSHDSMOVAX,0000HMOVDS,AXMOVBX,4*nMOVAX,OFFSETSERVICEMOVBX,AXMOVAX,SEGSERVICEMOVBX+2,AXPOPDSSTI2021/7/2215方法二、方法二、DOS设计设计2个子程序,专门用于中断向量的读出、写入个子程序,专门用于中断向量的读出、写入INT21H的的35H子功能子功能功能:读出功能:读出n型中断向量型中断向量入口:入口:AL=中断类型码中断类型码出口:出口:ES:BX=n型中断向量型中断向量INT21H的的25H子功能子功能功能:写入功能:写入n型中断向量型中断向量入口:入口:DS=中断服务程序所在代码段的段基址中断服务程序所在代码段的段基址DX=中断服务程序入口的偏移地址中断服务程序入口的偏移地址2021/7/2216例:把用户程序中以例:把用户程序中以“TIMER”命名的中断服务子程序命名的中断服务子程序的入口地址的入口地址41CH41CH+3单元单元数:数:OLD1CDD?代:代:MOVAH,35HMOVAL,1CHINT21HMOVWORDPTROLD1C,BXMOVWORDPTROLD1C+2,ESPUSHDSMOVAX,CSMOVDS,AXMOVDX,OFFSETTIMERMOVAH,25HMOVAL,1CHINT21HPOPDS2021/7/22177.关于中断向量表的说明关于中断向量表的说明在实模式下在实模式下,系统系统RAM最低端的最低端的1K单元为中断向量表,单元为中断向量表,但是并非每一个表项都是中断向量。但是并非每一个表项都是中断向量。BIOS利用某些表项利用某些表项做为做为“参数指针参数指针”,参数指针指向的是一群参数参数指针指向的是一群参数,而不是中断而不是中断服务程序服务程序,因此称它们为因此称它们为“向量向量”是比较合适的。是比较合适的。例如例如:1DH型向量型向量,指向屏幕参数表。指向屏幕参数表。1EH型向量型向量,指向软盘参数表。指向软盘参数表。1FH型向量型向量,指向图型字符表。指向图型字符表。41H型向量型向量,指向第一台硬盘参数表。指向第一台硬盘参数表。46H型向量型向量,指向第二台硬盘参数表。指向第二台硬盘参数表。用户程序不能改动这些向量用户程序不能改动这些向量,当然也不能执行以当然也不能执行以1DH,1EH,1FH,41H,46H为中断类型码的软中断指令为中断类型码的软中断指令,否则系统否则系统将会瘫痪。将会瘫痪。2021/7/2218.4系统中断的分类系统中断的分类CPU中断中断硬件中断硬件中断(外部中断外部中断)软件中断软件中断(内部中断内部中断)PC机机256种种中断中断可屏蔽中断可屏蔽中断非屏蔽中断非屏蔽中断BIOS中断中断DOS中断中断DOS专用中断专用中断DOS保留中断保留中断用户可用用户可用DOS中断中断用户可开发的中断用户可开发的中断2021/7/2219CPU中断逻辑中断逻辑CPU中断中断软件中断(软件中断(INTn指令)指令)非屏蔽中断请求非屏蔽中断请求中中断断控控制制系系统统NMI可可屏屏蔽蔽中中断断请请求求INTR2021/7/2220一一.CPU中断中断CPU中断是指中断是指:CPU执行某些操作而引发的中断执行某些操作而引发的中断,这类中这类中断使用了断使用了0、1、3、4、6、7中断号。中断号。1.除法错中断除法错中断0型中断型中断CPU执行执行DIV或或IDIV指令指令,如果除数为如果除数为0,或者商数超出或者商数超出寄存器的表示范围寄存器的表示范围,CPU自动调用自动调用0型中断服务程序。型中断服务程序。DOS为为0型中断设计的服务程序并没有为型中断设计的服务程序并没有为“除法错除法错”采取采取什么补救措施什么补救措施,仅仅是显示一行错误信息仅仅是显示一行错误信息“Divideoverflow”,然后返回然后返回DOS。因此因此,用户程序执行用户程序执行“INT0”指令是毫无意指令是毫无意义的。义的。2021/7/22212.单步中断单步中断1型中断型中断3.断点中断断点中断3型中断型中断八八四四当标志寄存器的当标志寄存器的T标志为标志为1时时,CPU一条指令执行完毕一条指令执行完毕,自动调用自动调用1型中断服务程序。但是型中断服务程序。但是,DOS为为1型中断设计的服务程序只有一型中断设计的服务程序只有一条条IRET指令。实际上指令。实际上,单步中断是因为单步中断是因为DEBUG程序的需要而设计程序的需要而设计的。在用户程序中执行的。在用户程序中执行“INT1”指令是毫无意义的。指令是毫无意义的。CPU执行执行“INT3”指令后指令后,调用调用3型中断服务程序型中断服务程序,而而DOS系统的系统的3型中断服务程序也只有一条型中断服务程序也只有一条IRET指令。断点中断也是因为指令。断点中断也是因为DEBUG程序的需要而设计的。而在程序的需要而设计的。而在DEBUG程序当中程序当中,利用利用“INT3”指令设置程序断点指令设置程序断点,当执行到当执行到“INT3”指令时指令时,转入转入3型中断型中断服务程序(该程序应由服务程序(该程序应由DEBUG设计)设计),显示断点前程序的执行结显示断点前程序的执行结果。在用户程序中执行果。在用户程序中执行“INT3”指令是毫无意义的。指令是毫无意义的。2021/7/22224.溢出中断溢出中断4型中断型中断对应的软件中断指令有两种汇编格式对应的软件中断指令有两种汇编格式,功能稍有不同。功能稍有不同。INTOINT4八八四四当当FLAG寄存器的溢出标志为寄存器的溢出标志为1,在这种条件下在这种条件下,执行执行“INTO”指令指令,将会调用将会调用4型服务程序。否则型服务程序。否则,如果溢出标如果溢出标志为志为0,执行执行“INTO”指令是无效的。指令是无效的。但是和但是和1型、型、3型中断一样,型中断一样,DOS为为4型中断设计的型中断设计的服务程序也只有一条服务程序也只有一条IRET指令。如果用户程序需要对指令。如果用户程序需要对运算过程进行监控,应当在有可能产生溢出的运算操运算过程进行监控,应当在有可能产生溢出的运算操作之后安排一条作之后安排一条INTO指令监测溢出标志指令监测溢出标志,同时同时,还要自还要自行设计溢出处理程序取代原先的行设计溢出处理程序取代原先的4型中断服务程序。型中断服务程序。2021/7/2223二二.软件中断软件中断执行执行有定义的有定义的INTn指令而引发的中断指令而引发的中断,称为软件中断。称为软件中断。在这里在这里,之所以加了之所以加了“有定义的有定义的”这一限制词这一限制词,是因为并非所是因为并非所有的中断号都有与之配套的中断服务程序。有的中断号都有与之配套的中断服务程序。软件中断使用软件中断使用05H,10HFFH中的若干个中断号。软件中的若干个中断号。软件中断又可分为中断又可分为BIOS中断、中断、DOS中断。中断。1.BIOS中断中断BIOS中断中断,占用了占用了05H、10H1FH中断号中断号,用户程序执用户程序执行相关的软中断指令可以调用相应的中断服务程序。行相关的软中断指令可以调用相应的中断服务程序。INT05H屏幕打印屏幕打印;INT10H屏幕显示屏幕显示I/O;INT11H设备配置检测设备配置检测;八八四四2021/7/2224INT12H测试内存容量测试内存容量;INT13H磁盘磁盘I/O;INT14H串行通信串行通信 I/O;INT15HBIOS扩展功能扩展功能;INT16H键盘键盘I/O;INT17H打印机打印机I/O;INT18H启动启动PC机机ROMBASIC(AT机机)无无;INT19H重新装入引导程序重新装入引导程序;INT1AH实时时钟管理实时时钟管理。中断号中断号1DH,1EH,1FH,41H,46H也被也被BIOS占用了。但是,与占用了。但是,与这些中断号对应的并不是中断服务程序。也就是说,不存在与这些中断号对应的并不是中断服务程序。也就是说,不存在与这些中断号对应的软中断指令这些中断号对应的软中断指令,用户程序如果执行用户程序如果执行INT1DHINT1FH,INT41H,INT46H,必将引起系统瘫痪(参看中断向量必将引起系统瘫痪(参看中断向量表的说明)。表的说明)。八八四四2021/7/22252.DOS中断中断DOS中断中断,又分为又分为DOS专用中断专用中断,DOS保留中断保留中断,用户可调用的用户可调用的DOS中断以及保留给用户开发的中断。中断以及保留给用户开发的中断。(1)DOS专用中断专用中断22H型中断型中断程序正常结束时程序正常结束时,DOS将自动调用该中断返回将自动调用该中断返回父进程。父进程。23H型中断型中断程序非正常结束时程序非正常结束时(如如:用户按下用户按下Ctrl_C,或者或者Ctrl_Break中途停止程序的运行中途停止程序的运行),DOS调用该中断。调用该中断。24H型中断型中断程序运行发生严重错误时程序运行发生严重错误时(例如例如:对软磁盘文件对软磁盘文件进行操作的时候进行操作的时候,驱动器小门没有关闭驱动器小门没有关闭,或进行打印操作而打印或进行打印操作而打印机没有连通机没有连通),DOS自动调用此类中断自动调用此类中断,发出错误信息发出错误信息“NotreadyAbort,Retry,Ignore?”,这些中断是这些中断是DOS专用的专用的,DOS在调用此类在调用此类中断之前中断之前,还要做些准备工作。因此还要做些准备工作。因此,用户程序不能直接调用这些用户程序不能直接调用这些中断。中断。八八四四2021/7/222628H3FH型中断型中断也为也为DOS专用专用,Microsoft公司没有公公司没有公开这类中断的功能。但是开这类中断的功能。但是,一些醉心钻研一些醉心钻研DOS的专家们的专家们,仍然仍然破译出一些有价值的信息。例如破译出一些有价值的信息。例如:INT33H为鼠标器调用。为鼠标器调用。(2)用户可调用的用户可调用的DOS中中断断20H型中断型中断用户程序执行用户程序执行INT20H指令可结束程序的指令可结束程序的运行运行,返回返回DOS。但必须注意但必须注意:在执行在执行INT20H之前之前,必须保证必须保证用户程序用户程序CS寄存器的内容等于寄存器的内容等于PSP段基址。段基址。因此在用户的因此在用户的COM文件中文件中,可以直接使用可以直接使用INT20H返回返回DOS。INT20H与与INT21H的的0号功能调用号功能调用,完成相同的操作。完成相同的操作。21H型中断型中断DOS系统的许多功能都集中在系统的许多功能都集中在21H型中断型中断服务程序中。用户程序把功能号写入服务程序中。用户程序把功能号写入AH寄存器寄存器,设置相应的设置相应的入口参数入口参数,然后执行然后执行INT21H即可调用不同的功能。我们把即可调用不同的功能。我们把执行执行INT21H指令所完成的功能指令所完成的功能,称为称为“DOS系统功能调用系统功能调用”。八八四四2021/7/222725H型中断型中断此类中断在指定的驱动器上此类中断在指定的驱动器上,按照扇区号读按照扇区号读取信息。取信息。26H型中断型中断在指定的驱动器上在指定的驱动器上,按照扇区号写入信息。按照扇区号写入信息。INT25H,INT26H称为称为“绝对磁盘读写调用绝对磁盘读写调用”。在此类调用中。在此类调用中,DOS系统不使用文件控制块系统不使用文件控制块,也不使用文件号去管理磁盘文也不使用文件号去管理磁盘文件件,而是按照扇区号直接进行磁盘信息的读写。而是按照扇区号直接进行磁盘信息的读写。27H型中断型中断中止并驻留程序于内存之中。用户程序执中止并驻留程序于内存之中。用户程序执行行INT27H可以中止程序的运行可以中止程序的运行,并且把欲驻留的程序段驻并且把欲驻留的程序段驻留在内存之中。留在内存之中。八八四四2021/7/222860H66H是保留给用户使用的中断号。是保留给用户使用的中断号。DOS没有为它们没有为它们设计服务程序。设计服务程序。启动启动DOS后后,60H66H型型“中断向量中断向量”均为均为0值。正因为如此值。正因为如此,如果你没有开发出如果你没有开发出60H66H型中断服务程型中断服务程序序,没有改写没有改写60H66H型中断向量型中断向量,千万不可调用此类中断千万不可调用此类中断,否则系统瘫痪。否则系统瘫痪。(3)用户可开发的用户可开发的DOS中断中断(4)DOS保留的中断保留的中断DOS为了自身版本的升级和功能扩充为了自身版本的升级和功能扩充,保留了若干个中断保留了若干个中断它们是它们是:42H45H,4BH5FH,68H6FH,72H74H,77H7FH。以上关于软件中断的概念以上关于软件中断的概念,在设计应用程序时是十分有用在设计应用程序时是十分有用的的,实际上实际上,如果不涉及如果不涉及BIOS中断中断,不涉及不涉及DOS中断中断,用户将无用户将无法设计应用程序。法设计应用程序。八八四四2021/7/22299.58259中断控制器中断控制器外部中断外部中断是由是由CPU以外的中断请求而引发的。以外的中断请求而引发的。CPU只有一个引脚接收外部的中断请求,如果有多个只有一个引脚接收外部的中断请求,如果有多个中断请求,怎样连接至中断请求,怎样连接至CPU呢?为此呢?为此INTEL公司设计公司设计了专用的配套芯片了专用的配套芯片8259中断控制器,由中断控制器,由8259管理管理8个中个中断源,并最后向断源,并最后向CPU提中断请求。提中断请求。八八五五中断中断0中断中断78259中断请求中断请求80X86INTR图示图示2021/7/2230一一.8259的内部结构的内部结构数据数据总线总线缓冲器缓冲器D0D7读读/写写逻辑逻辑级连级连/缓冲缓冲比较器比较器CAS1CAS0CAS2SP/ENRDWRA0控制逻辑控制逻辑INTINTA中断中断服务服务寄存器寄存器(ISR)优先权优先权电路电路中断中断请求请求寄存器寄存器(IRR)IR0IR1IR2IR3IR4IR5IR6IR7中断屏蔽寄存器中断屏蔽寄存器(IMR)内内部部总总线线八八五五CS2021/7/22311.中断请求寄存器中断请求寄存器(IRR)寄存引脚寄存引脚IR0IR7的中断请求信号的中断请求信号,IRRi位置位置1,表明,表明IRi引脚上有了中断请求信号引脚上有了中断请求信号2.中断屏蔽寄存器中断屏蔽寄存器(IMR)寄存程序员写入的中断屏蔽字,屏蔽字某位寄存程序员写入的中断屏蔽字,屏蔽字某位=1(IMRi位位=1),则与该位对应的中断请求信号则与该位对应的中断请求信号(IRRi位位)就就不能送到中断优先权电路。不能送到中断优先权电路。八八五五2021/7/2232优优先先权权电电路路Q3Q4IR3IR4Q3Q4IMRIRR八八五五2021/7/2233如:如:MOVAL,11111100BOUT屏蔽寄存器口地址,屏蔽寄存器口地址,AL;屏蔽屏蔽IRR7IRR2的请求开放的请求开放IRR1,IRR0如:如:INAL,屏蔽寄存器口地址屏蔽寄存器口地址ANDAL,11110111BOUT屏蔽寄存器口地址,屏蔽寄存器口地址,AL;开放开放IRR3的请求的请求;对其它位的请求不改变对其它位的请求不改变;屏蔽屏蔽/开放的状态开放的状态3.优先权电路优先权电路(排队电路排队电路)作用:作用:比较同时送达优先权电路的中断请求,哪一个比较同时送达优先权电路的中断请求,哪一个级别最高。级别最高。八八五五2021/7/2234比较比较CPU正为之服务的中断源和刚进入优先权电路正为之服务的中断源和刚进入优先权电路的中断源,哪一个级别更高。的中断源,哪一个级别更高。通过判优通过判优选中选中其中级别最高的中断源,然后通过其中级别最高的中断源,然后通过控制电路,从控制电路,从INT端向端向CPU提中断请求。提中断请求。4.中断控制电路中断控制电路作用:作用:寄存一组初始化命令字和操作命令字,通过译码产寄存一组初始化命令字和操作命令字,通过译码产生内部控制信号生内部控制信号当判优电路选中一个中断源时向当判优电路选中一个中断源时向CPU提中断请求提中断请求(INT)八八五五2021/7/2235通过通过INTA接收接收CPU送来的中断响应信号,中断响应送来的中断响应信号,中断响应信号是信号是2个连续的负脉冲。个连续的负脉冲。INTA使使8259向向CPU送出被选中的中断源的中断类型码送出被选中的中断源的中断类型码使与被选中的中断源对应的使与被选中的中断源对应的ISRi位置位置1,IRRi位置位置0八八五五2021/7/22365.中断服务寄存器中断服务寄存器(ISR)ISR:8位寄存器,位寄存器,ISRi位与位与IRRi位一一对应位一一对应作用作用:记录:记录CPU正为之服务的是哪一个中断源,怎样记录?正为之服务的是哪一个中断源,怎样记录?八八五五反之,反之,如果如果ISR0位由位由10,表明,表明IR0的中断服务程序的中断服务程序执行完了。执行完了。所以所以ISR的每一位都是响应中断源的中断服务标志位。的每一位都是响应中断源的中断服务标志位。如:通过判优电路如:通过判优电路IRR0位的请求被选中,位的请求被选中,8259向向CPU发中断请求,通过发中断请求,通过INTA收到第一个中断响应信号后,收到第一个中断响应信号后,ISR0位置位置1,IRR0位置位置0。ISR0位置位置1,表明,表明CPU正在正在准备准备(或正在或正在)执行执行IR0的服务程序。的服务程序。2021/7/22376.数据总线缓冲器数据总线缓冲器作用:作用:完成与完成与CPU数据线配接数据线配接接收初始化命令字,操作命令字接收初始化命令字,操作命令字当收到第二个中断响应脉冲时,通过他们当收到第二个中断响应脉冲时,通过他们向向CPU送出被选中的中断源的中断类型码送出被选中的中断源的中断类型码n在这之后在这之后CPU从从4n+04n+3单元取出单元取出n型中断向量,型中断向量,从而转入从而转入n型服务程序。型服务程序。7.读读/写控制模块写控制模块接收接收CPU的读的读/写控制命令字和口地址选择信号。写控制命令字和口地址选择信号。八八五五2021/7/22388.级连级连/缓冲比较器缓冲比较器一位一位8259可以管理可以管理8级中断,二片级中断,二片8259“级连级连”可管理可管理15级中断,级连级中断,级连/缓冲比较器是为完成多片缓冲比较器是为完成多片8259级连设级连设置的模块。置的模块。二二.8259的中断过程的中断过程CPU响应硬件中断的过程响应硬件中断的过程8259A的中断过程的中断过程,就是微机系统响应可屏蔽中断的就是微机系统响应可屏蔽中断的过程过程,这一过程这一过程,简单描述如下简单描述如下:首先由中断请求寄存器寄存加到引脚首先由中断请求寄存器寄存加到引脚IR0IR7上的上的中断请求。中断请求。在中断屏蔽寄存器的管理下在中断屏蔽寄存器的管理下,没有被屏蔽的中断请求没有被屏蔽的中断请求被送到优先权电路判优。被送到优先权电路判优。八八五五2021/7/2239经过优先权电路的判别经过优先权电路的判别,选中当前级别最高的中断选中当前级别最高的中断源源,然后从引脚然后从引脚INT向向CPU发出中断请求信号。发出中断请求信号。CPU满足一定条件后满足一定条件后,向向8259A发出发出2个中断响应信个中断响应信号号(负脉冲负脉冲)。在实模式下在实模式下,CPU从从4n4n3单元取出该中断单元取出该中断源的中断向量源的中断向量IP、CS,从而引导从而引导CPU执行该中断执行该中断源的中断服务程序。源的中断服务程序。八八五五8259A从引脚从引脚INTA收到第收到第1个中断响应信号个中断响应信号之后之后,立即立即使中断服务寄存器中与被选中的中断源对应的那一使中断服务寄存器中与被选中的中断源对应的那一位置位置1,同时把中断请求寄存器中的相应位清同时把中断请求寄存器中的相应位清0。从引脚从引脚INTA收到第收到第2个中断响应信号后个中断响应信号后,8259A把选中把选中的中断源类型码的中断源类型码n,通过数据线送往通过数据线送往CPU。2021/7/2240三三.8259的中断管理方式的中断管理方式8259是很复杂的中断控制器,它从是很复杂的中断控制器,它从5个方面对中断进个方面对中断进行管理。行管理。8259A中断管理中断管理方式方式中断触发方式中断触发方式中断屏蔽方式中断屏蔽方式中断优先级管理方式中断优先级管理方式中断结束方式中断结束方式总线连接方式总线连接方式边沿触发边沿触发电平触发电平触发常规屏蔽方式常规屏蔽方式特殊屏蔽方式特殊屏蔽方式完全嵌套方式完全嵌套方式特殊嵌套方式特殊嵌套方式优先级循环方式优先级循环方式自动自动EOI方式方式非自动非自动EOI方式方式缓冲方式缓冲方式非缓冲方式非缓冲方式常规常规EOI循环方式循环方式自动自动EOI循环方式循环方式特殊特殊EOI循环方式循环方式常规常规EOI方式方式特殊特殊EOI方式方式每一种方式又有多种选择每一种方式又有多种选择八八五五2021/7/2241说明:说明:1.各种中断管理方式的选择是在初始化编程时,通各种中断管理方式的选择是在初始化编程时,通2.过初始化命令字设定的。过初始化命令字设定的。2.中断系统是全机的核心,只有对中断系统的方方面中断系统是全机的核心,只有对中断系统的方方面面全面了解的基础上才能组织初始化命令字。面全面了解的基础上才能组织初始化命令字。3.只有系统程序员才具备这方面的知识,所以对只有系统程序员才具备这方面的知识,所以对8259的初始化编程应由系统程序完成,本书不做介绍的初始化编程应由系统程序完成,本书不做介绍,原因是原因是:8259A是中断系统的核心器件是中断系统的核心器件,对它的初始化编程要涉对它的初始化编程要涉及到中断系统软、硬件许多问题及到中断系统软、硬件许多问题,而且一旦完成初始化而且一旦完成初始化,所所有硬件中断源和中断处理程序有硬件中断源和中断处理程序(包括已开发和未开发的包括已开发和未开发的)都都必须受其制约。必须受其制约。八八五五2021/7/2242严格地讲严格地讲,像这样影响深远而且带有决策性质的问题像这样影响深远而且带有决策性质的问题,只有只有微机系统的设计者才有权威定夺。微机系统的设计者才有权威定夺。正因为如此正因为如此,对系统对系统8259A的初始化编程是在微机启动之后的初始化编程是在微机启动之后由由BIOS自动完成的。从系统安全性考虑自动完成的。从系统安全性考虑,用户在使用过程中用户在使用过程中不应当再对其初始化不应当再对其初始化,更不能改变对它的初始化设置!更不能改变对它的初始化设置!八八五五2021/7/2243四四.286以上微机,以上微机,8259的中断管理方式的中断管理方式系统加电后:由系统加电后:由BIOS对对8259初始化编程,设定的中断初始化编程,设定的中断管理方式为管理方式为系统系统8259A,中断触发方式为中断触发方式为边沿触发边沿触发,即,即为中断为中断请求。请求。中断屏蔽方式采用中断屏蔽方式采用常规屏蔽方式常规屏蔽方式即应用时,向即应用时,向8259中断屏蔽寄存器写入适当屏蔽字即可中断屏蔽寄存器写入适当屏蔽字即可屏蔽屏蔽/开放某一级中断。开放某一级中断。八八五五2021/7/2244 中断源为中断源为固定优先级固定优先级 即即IR0IR0中断请求级别最高,中断请求级别最高,IR7IR7中断请求级别最低。中断请求级别最低。采用采用常规中断结束方式常规中断结束方式 即在中断服务子程序结束之前向即在中断服务子程序结束之前向82598259送中断结束命送中断结束命 令。令。五五286以上的微机,对以上的微机,对8259的应用编程的应用编程对对82598259编程分二步进行:编程分二步进行: 对对82598259进行初始化编程进行初始化编程系统加电后,由系统加电后,由BIOSBIOS完成完成 对对82598259进行应用编程进行应用编程编写中断程序时,由中断程序完成,有编写中断程序时,由中断程序完成,有2 2项内容项内容八八五五2021/7/2245每一个硬件中断服务程序结束前必须向每一个硬件中断服务程序结束前必须向82598259送中断送中断 命令字,通知命令字,通知82598259本次中断结束,否则本次中断结束,否则82598259不能响不能响 应同一中断源的下次中断。应同一中断源的下次中断。 八八五五需要时,向需要时,向82598259中断屏蔽寄存器写入屏蔽字。中断屏蔽寄存器写入屏蔽字。 82598259收到中断结束命令后,把收到中断结束命令后,把ISRISR中的置中的置1 1位清位清0 0! 2021/7/2246 9.6 9.6 硬件中断硬件中断 一一. . 概述概述 1 1硬件中断分类:硬件中断分类:可屏蔽中断,非屏蔽中断可屏蔽中断,非屏蔽中断CPUCPU有有2 2个接收中断请求信号的引脚。个接收中断请求信号的引脚。 可屏蔽中断:可屏蔽中断: 输入到输入到INTRINTR引脚的中断请求信号,引脚的中断请求信号, 引发的中断。引发的中断。八八六六非屏蔽中断:非屏蔽中断: 输入到输入到NMINMI引脚的中断请求信号,引脚的中断请求信号, 引发的中断。引发的中断。INTRNMI2021/7/2247有可屏蔽中断请求,没有有可屏蔽中断请求,没有DMADMA请求,没有非屏蔽中请求,没有非屏蔽中 断请求断请求4.4.响应非屏蔽中断的条件响应非屏蔽中断的条件 有非屏蔽中断请求,没有有非屏蔽中断请求,没有DMADMA请求请求 一条指令执行完一条指令执行完八八六六3. 3. 响应可屏蔽中断的条件响应可屏蔽中断的条件CPUCPU一条指令执行完毕一条指令执行完毕2 2硬件中断的级别硬件中断的级别 DMA DMA请求级别高于非屏蔽中断高于可屏蔽中断。请求级别高于非屏蔽中断高于可屏蔽中断。 CPUCPU处于开中断状态(处于开中断状态(I I标标=1=1) 2021/7/2248二二. . 可屏蔽中断的硬件结构可屏蔽中断的硬件结构 IR0IR0IR1IR1IR2IR2IR3IR3IR4IR4IR5IR5IR6IR6IR7IR7日时钟日时钟键盘键盘IRQ3IRQ3IRQ4IRQ4IRQ5IRQ5IRQ6IRQ6IRQ7IRQ7辅串口辅串口主串口主串口并口并口2 2软盘软盘并口并口1 1CSCSA0A0主片片选主片片选地址线地址线A0A0CAS2CAS20 0INTINTINTRINTRS2S20 0D7D7D0D0CPUCPUINTAINTARDRDWRWRSP/ENSP/ENS2S20 0INTAINTAIORIORIOWIOW主主82598259总线控制器总线控制器+5+5V V从从8259 8259 INTINT从从8259 8259 CAS2CAS20 0从从82598259相应引脚相应引脚可屏蔽中断硬件结构可屏蔽中断硬件结构(1)(1)八八六六2021/7/2249硬盘硬盘CSCSA0A0从片片选从片片选地址线地址线A0A0CAS2CAS20 0INTINTD7D7D0D0INTAINTARDRDWRWRSP/ENSP/EN从从82598259主主82598259 IR2IR2主主8259 8259 CAS2CAS20 0 主主82598259相应引脚相应引脚可屏蔽中断硬件结构可屏蔽中断硬件结构(2)(2)IR1IR1IR3IR3IR5IR5IR7IR7IR0IR0IR2IR2IR4IR4IR6IR6实时时钟实时时钟IRQ10IRQ10IRQ9IRQ9IRQ12IRQ12IRQ11IRQ11用户中断用户中断保留保留保留保留保留保留保留保留协处理器协处理器八八六六2021/7/22501. 1. 使用使用2 2片片82598259级连,管理级连,管理1515级中断级中断八八六六2. 2. 中断源与中断类型中断源与中断类型2021/7/2251主主8259中断源中断源中断类型中断类型从从8259中断源中断源中断类型中断类型IR0日时钟日时钟08HIR0实时时钟实时时钟70HIR1键盘键盘09HIR1用户中断用户中断71H改向改向0AHIR2从从8259IR2保留保留72HIR3辅串口辅串口0BHIR3保留保留73HIR4主串口主串口0CHIR4保留保留74HIR5并行口并行口20DHIR5协处理器协处理器75HIR6软盘软盘0EHIR6硬盘硬盘76HIR7并行口并行口10FHIR7保留保留77H八八六六2021/7/2252中断级别中断级别最高最高最低最低 中断源中断源 日时钟中断日时钟中断 键盘中断键盘中断从从82598259IR0IR0 IR1 IR1 IR2 IR2辅串口辅串口主串口主串口并口并口2 2软盘软盘并口并口1 1IR7IR7中断类型码中断类型码08H09H70H71H改向改向0AH72H7777H H0BH0BH0CH0CHODHODH0EH0EH0FH0FH八八六六3. 3. 硬件可屏蔽中断的中断级别硬件可屏蔽中断的中断级别2021/7/22534系统分配的系统分配的8259口地址口地址中断屏蔽寄存器中断屏蔽寄存器口地址口地址接收中断结束命令接收中断结束命令的寄存器口地址的寄存器口地址主主825921H20H从从8259A1HA0H八八六六2021/7/22545 5中断结束命令中断结束命令 命令字命令字=20H接入主接入主8259IR0IR7的中断源的中断源其服务程序结束要向主其服务程序结束要向主8259送中断结束命令字送中断结束命令字MOVAL,20HOUT20H,AL恢复现场恢复现场IRET八八六六2021/7/2255MOV ALMOV AL,20H20H OUT 20H OUT 20H,ALAL OUT 0A0H OUT 0A0H,ALAL 恢复现场恢复现场 IRET IRET八八六六接入从接入从82598259的中断源,其服务程序结束应分别向的中断源,其服务程序结束应分别向 主、从主、从82598259各送一个中断结束命令字各送一个中断结束命令字 。2021/7/2256三三.关于用户中断关于用户中断1.用户中断请求的途径用户中断请求的途径用户用户中断中断请求请求80X86INTRIR2IR2 INT INTIMRIMR主主8259 INT INTIR1IR1IMRIMR从从8259 用户中断请求从用户中断请求从ISAISA总线总线B4B4端子(端子(IRQ9IRQ9)引入,引入,经过主经过主82598259,从,从82598259二级中断管理,最后由主二级中断管理,最后由主82598259向向CPUCPU提中断。提中断。 只有从只有从82598259IMR1IMR1置置0 0,主,主82598259IMR2IMR2置置0 0,其中断,其中断请求方能送到请求方能送到CPUCPU。 八八六六B42021/7/22572.2.实现用户中断必须对主、从实现用户中断必须对主、从82598259应用编程应用编程(这样(这样, ,对各种型号的主板都能适应)对各种型号的主板都能适应) INAL,0A1HANDAL,11111101BOUT0A1H,AL;开放用户中断开放用户中断INAL,21HANDAL,11111011BOUT21H,AL;开放从开放从8259中断中断3. .用户中断的中断类型用户中断的中断类型CPU响应用户中断后,自动转向响应用户中断后,自动转向“71H型型”服务程序服务程序八八六六2021/7/2258BIOSBIOS为为“71“71H H型型”设计的服务程序如下:设计的服务程序如下:PUSH AXMOVAL,20HOUT0A0H,ALPOPAXINT0AH待开发待开发用户服务程序用户服务程序IRETIRET有两个解决方法有两个解决方法:定义用户中断服务程序为定义用户中断服务程序为“0“0AHAH型型” 中断程序的准备工作:置换中断程序的准备工作:置换0 0AHAH型中断向量,即把型中断向量,即把 用户中断的中断向量用户中断的中断向量440 0AH AH 4 40AH+30AH+3单元单元 定义用户中断服务程序为定义用户中断服务程序为“71H型型”中断程序的准备工作:置换中断程序的准备工作:置换71H型中断向量,即把用户型中断向量,即把用户中断的中断向量中断的中断向量471H471H+3单元单元八八六六2021/7/22594. 4. 用户中断服务程序结束用户中断服务程序结束 若用户中断定义为若用户中断定义为0 0AHAH型,型, 服务程序结束前只向主服务程序结束前只向主82598259送结束命令送结束命令 若用户中断定义为若用户中断定义为71H服务程序结束前,向主从服务程序结束前,向主从8259各送一中断结束命令各送一中断结束命令四硬件中断和软件中断的区别四硬件中断和软件中断的区别 综合以上描述可以看出综合以上描述可以看出, ,CPUCPU在获得中断类型码在获得中断类型码以后以后, ,如何转向服务程序如何转向服务程序, ,就这一点而言就这一点而言, ,响应硬件响应硬件中断和软件中断的操作是相同的中断和软件中断的操作是相同的, ,但是硬件中断和但是硬件中断和软件中断有许多不同点软件中断有许多不同点: : 八八六六2021/7/2260 中断的引发方式不同中断的引发方式不同 硬件中断是由硬件中断是由CPUCPU以外的硬设备发出中断请求以外的硬设备发出中断请求( (接到接到 引脚引脚INTRINTR和和NMI)NMI)而引发的。而软件中断是由于而引发的。而软件中断是由于CPUCPU 执行执行INT nINT n指令而引发的。指令而引发的。 CPUCPU获取中断类型码的方式不同获取中断类型码的方式不同: :响应硬件可屏蔽中响应硬件可屏蔽中 断后断后, ,中断类型码是由中断类型码是由82598259A A提供的。响应软件中断提供的。响应软件中断 时时, ,中断类型码是由软件中断指令中断类型码是由软件中断指令INT nINT n本身提供的。本身提供的。 CPUCPU响应的条件不同响应的条件不同: :CPUCPU只有在开中断时只有在开中断时, ,才能响应才能响应 硬件可屏蔽中断硬件可屏蔽中断, ,响应软件中断不受此限制。响应软件中断不受此限制。 中断处理程序的结束方式不同。中断处理程序的结束方式不同。在硬件可屏蔽中断服务程序中在硬件可屏蔽中断服务程序中,中断处理结束后中断处理结束后,需要需要做两件事做两件事:八八六六2021/7/2261 一是向一是向82598259A A发出中断结束命令发出中断结束命令,8259,8259A A收到此命令收到此命令后将后将ISRISR寄存器中的相应位清寄存器中的相应位清0,0,结束中断。二是执行结束中断。二是执行IRETIRET指令指令, ,中断返回。中断返回。 而在软件中断服务程序中而在软件中断服务程序中, ,中断处理结束后只需执中断处理结束后只需执行行IRETIRET指令。这些都是设计中断服务程序必须掌握的指令。这些都是设计中断服务程序必须掌握的基本概念。基本概念。 9.7日时钟中断日时钟中断1.1.中断源中断源: : 系统系统8254 0#8254 0#计数器,每计数器,每5555msms有一次中断请求有一次中断请求 2. .中断类型中断类型:8型型八八七七2021/7/2262 CPU CPU转入转入8 8型中断后,完成下列工作型中断后,完成下列工作 开中断,保护现场(开中断,保护现场(DSDS压栈)压栈) 4040H DSH DS,对对“日时钟计数器日时钟计数器”加加1 1 测算软驱马达关闭时间测算软驱马达关闭时间IRETIRET1 1CHCH服务程序服务程序八八七七向主向主82598259送中断结束命令送中断结束命令恢复现场,恢复现场,IRET IRET 执行执行INT 1CHINT 1CH3.日时钟中断处理流程:日时钟中断处理流程:2021/7/22634.4.什么是什么是“日时钟计数器日时钟计数器” ” BIOSBIOS系统规定:系统规定:4040H:6CHH:6CH40H:6FH40H:6FH这这4 4个单元个单元(共(共3232位)为日时钟计数器,每位)为日时钟计数器,每5555msms加加1 1次,计数次,计数 到到:001800:001800B0HB0H,为为2424小时小时, ,其计数值供系统软件使用。其计数值供系统软件使用。 系统启动时系统启动时CPUCPU执行执行BIOSBIOS中的一段程序,读取中的一段程序,读取CMOSCMOS实实时时钟电路的时间值时时钟电路的时间值计数值计数值4040: :6 6CHCH40:6FH40:6FH做做为日时钟计数器的计数初值。为日时钟计数器的计数初值。八八七七2021/7/2264 5.5.关于关于1 1CHCH服务程序服务程序 8# 8#服务程序,每隔服务程序,每隔5555msms在在DS=40HDS=40H的前提下,调用的前提下,调用 一次一次1 1CHCH服务程序,之后又返回服务程序,之后又返回8 8型!型! 所以所以1 1CHCH中断是日时钟的外扩中断,用户可开发中断是日时钟的外扩中断,用户可开发 新的新的1 1CHCH中断(完成每中断(完成每5555msms一次的定时操作)取代一次的定时操作)取代 原来的。原来的。 9.8 9.8 实模式定时中断程序设计实模式定时中断程序设计 什么是定时中断?什么是定时中断? 利用中断技术,每隔一定时间完成一次预定的操作利用中断技术,每隔一定时间完成一次预定的操作定时操作。定时操作。 八八八八2021/7/2265一一. .定时中断程序的设计方法定时中断程序的设计方法1 . 1 . 硬件硬件:首先要明确谁是定时中断源?:首先要明确谁是定时中断源? 定时源是系统定时源是系统 8254 0# 8254 0#计数器计数器 定时源是定时源是ISAISA总线总线B4B4端子上的外扩定时源端子上的外扩定时源2 .2 .确定中断服务程序的类型确定中断服务程序的类型 这一问题和中断源有关系这一问题和中断源有关系 如果中断源是如果中断源是ISA总线总线B4端子引入的端子引入的则服务程序应定义为则服务程序应定义为0AH或或71H型,按用户中断处理型,按用户中断处理八八八八有两种可能有两种可能2021/7/2266如果中断源是系统如果中断源是系统8254 0#, 8254 0#, 而且定时操作周期而且定时操作周期= = 55 55msms整数倍整数倍, ,则定义用户服务程序为则定义用户服务程序为1CH型,取代型,取代系统的系统的1CH服务程序服务程序。 如果中断源是系统如果中断源是系统8254 0#8254 0#,但定时操作周期,但定时操作周期 55 55msms整数倍,应重新对整数倍,应重新对8254 0#8254 0#初始化初始化 八八八八2021/7/2267重新对系统重新对系统8254 0#8254 0#初始化初始化中断计数中断计数满满NmsNms定时操作定时操作新新8 8型服务程序型服务程序满满5555ms?ms?每隔每隔XmsXms提一次中断提一次中断Y YN NN N本次中断结束本次中断结束转系统原来的转系统原来的8 8型服务程序型服务程序Y Y其中其中:X X是是N N和和5555msms的最大公约数的最大公约数N N是定时操作的周期是定时操作的周期 八八八八2021/7/22683.3.置换中断向量置换中断向量 服务程序的类型确定之后,应置换相应的中断向量。服务程序的类型确定之后,应置换相应的中断向量。 4. .开放开放8259中断中断 从硬件中断的结构图可知:从硬件中断的结构图可知:用户中断要经过从用户中断要经过从82598259,主,主82598259两级中断管理,其两级中断管理,其 中断请求才能送到中断请求才能送到CPU,CPU,为了适应各种类型的主机板,为了适应各种类型的主机板, 在中断程序的准备工作中,应将从在中断程序的准备工作中,应将从8259 8259 IMR1IMR1位置零,位置零, 主主82598259IMR2IMR2位置零,从而打通用户中断请求的通道。位置零,从而打通用户中断请求的通道。一般说,各种型号的主机板对日时钟中断都是开放一般说,各种型号的主机板对日时钟中断都是开放 的,用户不必再采取措施。的,用户不必再采取措施。 八八八八2021/7/22695 . 5 . 避免避免“DOSDOS重入重入”图示图示2121H H型服务型服务程序程序IRETIRET现现行行程程序序INT 21HINT 21HINT 21H INT 21H 转服务程序转服务程序有中断请求有中断请求DOS DOS 不允许重入不允许重入中断服务程序应避免使用中断服务程序应避免使用INT21H八八八八2021/7/22706服务程序的执行时间服务程序的执行时间 远远小于定时中断的时间间隔远远小于定时中断的时间间隔7. 7. 中断结束向中断结束向82598259发中断结束命令发中断结束命令 八八八八2021/7/2271二二. .定时中断程序结构定时中断程序结构保护现场保护现场服务程序服务程序定时时间到?定时时间到?向向82598259送结束命令送结束命令恢复现场恢复现场IRETIRETN N执行定时操作执行定时操作Y Y避免避免DOSDOS重入重入特点特点:服务程序直接:服务程序直接进行定时操作进行定时操作(注意注意:避免避免DOS重入重入)* *表示视具体情况而言表示视具体情况而言*关中断关中断中断源初始化中断源初始化置换中断向量置换中断向量其它准备工作其它准备工作开中断开中断主程序主程序等待中断等待中断恢复系统资源恢复系统资源恢复中断向量恢复中断向量返回返回DOSDOS程序结束前程序结束前之之一一八八八八2021/7/2272关中断关中断中断源初始化中断源初始化置换中断向量置换中断向量其它准备工作其它准备工作开中断开中断主程序主程序恢复系统资源恢复系统资源恢复中断向量恢复中断向量返回返回DOSDOS程序结束前程序结束前之二之二*其他操作其他操作有无有无“时间到时间到”标志标志执行定时操作执行定时操作N NY Y特点:特点:服务程序服务程序不直接进行定时不直接进行定时操作,而是建立操作,而是建立时间到标志。时间到标志。主程序中判时间主程序中判时间到标志,再进行到标志,再进行定时操作。定时操作。 服务程序服务程序保护现场保护现场定时时间到?定时时间到?向向82598259送结束命令送结束命令恢复现场恢复现场IRETIRET设置设置“时间到时间到”标志标志Y YN N“设置时间到标志设置时间到标志”:利用数据段某单元:利用数据段某单元或某一空闲寄存器。或某一空闲寄存器。 八八八八*2021/7/2273三三. .定时中断程序设计举例定时中断程序设计举例 【例【例8.9.18.9.1】 1 1CHCH型中断的应用型中断的应用 假设微机系统外扩了如下的数码管电路假设微机系统外扩了如下的数码管电路, ,要求使用要求使用系统定时源并采用中断方式系统定时源并采用中断方式, ,每隔一秒完成一次每隔一秒完成一次8 8字左字左移移, ,循环往复循环往复, ,直到主机键盘按下任意键时停止。直到主机键盘按下任意键时停止。 八八八八6位反相驱动器位反相驱动器8位锁存器位锁存器(位选位选)空闲空闲CPUD0D7CS(200H选中选中)8位同相驱动器位同相驱动器8位锁存器位锁存器(段选段选)CPUD0D7CS(201H选中选中)badghcfeah2021/7/22746位反相驱动器位反相驱动器8位锁存器位锁存器(位选位选)空闲空闲CPUD0D7CS(200H选中选中)8位同相驱动器位同相驱动器8位锁存器位锁存器(段选段选)CPUD0D7CS(201H选中选中)badghcfe图中数码管为共阴极图中数码管为共阴极,6,6个数码管的同名段已复接个数码管的同名段已复接, ,该电路有两个端口该电路有两个端口, ,即段选口即段选口201201H,H,位选口位选口200200H H。ah八八八八2021/7/22756位反相驱动器位反相驱动器8位锁存器位锁存器(位选位选)空闲空闲CPUD0D7CS(200H选中选中)8位同相驱动器位同相驱动器8位锁存器位锁存器(段选段选)CPUD0D7CS(201H选中选中)badghcfe 针对口地址针对口地址201201H H执行输出指令时执行输出指令时, ,段选寄存器锁存段选寄存器锁存数据线数据线D0D0D7D7的信息的信息, ,经过同相驱动器经过同相驱动器, ,驱动驱动6 6个数码管个数码管的的a ah h阳极段。即数据线阳极段。即数据线D0D0对应于对应于a a段段,数据线数据线D7D7对应于对应于h h段。段。 ah八八八八2021/7/22766位反向驱动器位反向驱动器8位锁存器位锁存器(位选位选)空闲空闲CPUD0D7CS(200H选中选中)8位同相驱动器位同相驱动器8位锁存器位锁存器(段选段选)CPUD0D7CS(201H选中选中)badghcfe 针对口地址针对口地址200200H H执行输出指令时执行输出指令时, ,位选寄存器锁存位选寄存器锁存数据线数据线D0D0D7D7位的信息位的信息, ,经过反相驱动器经过反相驱动器, ,驱动第驱动第1 1第第6 6位数码管的共阴极。当位数码管的共阴极。当D0D0位为位为1 1时时, ,点亮第点亮第1 1位数码位数码管管, ,D0D0位为位为0 0时时, ,熄灭第熄灭第1 1位数码管位数码管, ,以此类推。以此类推。 八八八八ah2021/7/2277设计思路设计思路 因为系统定时器每隔因为系统定时器每隔5555msms产生一次日时钟中断产生一次日时钟中断, ,中中断断1818次为次为990990ms,ms,接近一秒钟。还由于日时钟中断每次都接近一秒钟。还由于日时钟中断每次都要调用要调用1 1CHCH型中断型中断, ,因此用户可以设计新的因此用户可以设计新的1 1CHCH型中断服型中断服务程序务程序, ,对日时钟中断进行计数对日时钟中断进行计数, ,计满计满1818次完成一次次完成一次8 8字字左移。左移。 对日时钟中断进行对日时钟中断进行“中断计数中断计数”,”,是实现长时间定时是实现长时间定时的常用方法。的常用方法。 八八八八2021/7/2278关中断关中断转移系统的转移系统的1 1CHCH型中断向量型中断向量写入用户的写入用户的1 1CHCH型中断向量型中断向量第第6 6位数码显示位数码显示8 8字字开中断开中断主程序主程序有键入?有键入?恢复系统的恢复系统的1 1CHCH型中断向量型中断向量返回返回DOSDOSY YN N保护现场保护现场重新定义用户数据段重新定义用户数据段中断计数中断计数N N满满1818次?次?1818中断计数单元中断计数单元8 8字左移一位字左移一位恢复现场恢复现场中断返回中断返回Y Y1 1CHCH型中断服务程序型中断服务程序图图8.9 8.9 例例8.9.18.9.1程序框图程序框图 八八八八2021/7/2279解法解法1 1:借用系统:借用系统8254 0#8254 0#计数器,定义服务程序为计数器,定义服务程序为 1 1CHCH型。型。八八八八2021/7/2280 程序清单程序清单 ; ;FILENAME:891.ASMFILENAME:891.ASM .486 .486DATA SEGMENT USE16DATA SEGMENT USE16OLD1C DD ?OLD1C DD ?ICOUNT DB 18 ;ICOUNT DB 18 ;中断计数初值中断计数初值ORIGIN DB 20H ;ORIGIN DB 20H ;数码管位选初值数码管位选初值DATA ENDSDATA ENDSCODE SEGMENT USE16CODE SEGMENT USE16 ASSUME CS:CODE,DS:DATA ASSUME CS:CODE,DS:DATABEG: MOV AX,DATABEG: MOV AX,DATA MOV DS,AX MOV DS,AX CLI ; CLI ;关中断关中断 CALL READ1CCALL READ1C CALL WRITE1C CALL WRITE1C八八八八2021/7/2281MOV DX,201HMOV DX,201HMOV AL,7FHMOV AL,7FH OUT DX,AL ; OUT DX,AL ;输出输出8 8的字型码的字型码 MOV DX,200HMOV DX,200H MOV AL,ORIGIN MOV AL,ORIGIN OUT DX,AL ; OUT DX,AL ;定位显示定位显示 STI ;STI ;开中断开中断SCAN: MOV AH,1SCAN: MOV AH,1 INT 16H ; INT 16H ;有键入有键入? ? JZ SCAN ;JZ SCAN ;否转否转 CALL RESETCALL RESET MOV AH,4CH MOV AH,4CH INT 21HINT 21H八八八八2021/7/2282SERVICE PROCSERVICE PROC PUSHA ; PUSHA ;保护现场保护现场 PUSH DSPUSH DS MOV AX,DATAMOV AX,DATAMOV DS,AX ;MOV DS,AX ;重新给重新给DSDS赋值赋值 DEC ICOUNT ;DEC ICOUNT ;中断计数中断计数 JNZ EXIT ;JNZ EXIT ;不满不满1818次转次转 MOV ICOUNT,18 ;MOV ICOUNT,18 ;满满1818次重新设置计数初值次重新设置计数初值 SHR ORIGIN,1SHR ORIGIN,1 JNC NEXT JNC NEXT MOV ORIGIN,20H MOV ORIGIN,20HNEXT: MOV AL,ORIGINNEXT: MOV AL,ORIGIN MOV DX,200H MOV DX,200H OUT DX,AL ;8 OUT DX,AL ;8字左移一位字左移一位EXIT: POP DS ;EXIT: POP DS ;恢复现场恢复现场 POPAPOPA IRET ; IRET ;返回系统返回系统8 8型中断服务程序型中断服务程序SERVICE ENDPSERVICE ENDP八八八八2021/7/2283READ1C PROC ;READ1C PROC ;转移系统转移系统1 1CHCH型中断向量型中断向量 MOV AX,351CHMOV AX,351CH INT 21H INT 21H MOV WORD PTR OLD1C,BX MOV WORD PTR OLD1C,BX MOV WORD PTR OLD1C+2,ES MOV WORD PTR OLD1C+2,ES RET RETREAD1C ENDPREAD1C ENDP;-;-WRITE1C PROC ;WRITE1C PROC ;写入用户写入用户1 1CHCH型中断向量型中断向量 PUSH DSPUSH DS MOV AX,CODE MOV AX,CODE MOV DS,AX MOV DS,AX MOV DX,OFFSET SERVICE MOV DX,OFFSET SERVICE MOV AX,251CH MOV AX,251CH INT 21H INT 21H八八八八2021/7/2284POP DSPOP DS RET RETWRITE1C ENDPWRITE1C ENDP;-;-RESET PROC ;RESET PROC ;恢复系统恢复系统1 1CHCH型中断向量型中断向量 MOV DX,WORD PTR OLD1CMOV DX,WORD PTR OLD1C MOV DS,WORD PTR OLD1C+2MOV DS,WORD PTR OLD1C+2 MOV AX,251CH MOV AX,251CH INT 21H INT 21H RETRETRESET ENDPRESET ENDPCODE ENDSCODE ENDS END BEG END BEG八八八八2021/7/2285重点注意重点注意3 3个问题个问题: : 进入服务程序后,重新给进入服务程序后,重新给DSDS赋值赋值 服务程序结束前,没有给服务程序结束前,没有给82598259送结束命令送结束命令 RESETRESET子程序中,给子程序中,给DX,DSDX,DS赋值不能颠倒赋值不能颠倒 八八八八2021/7/2286解法解法2 2:借用:借用8254 0#8254 0#计数器,重新对其初始化,计数器,重新对其初始化,使之每隔使之每隔5 5msms有一次中断,定义服务程序为有一次中断,定义服务程序为8 8型。型。源程序请见书源程序请见书P211P211214 214 重点解释:重点解释:怎样从用户的怎样从用户的8 8型中断服务程序转入系统的型中断服务程序转入系统的8 8型中型中断服务程序?断服务程序? 在代码段中在代码段中 OLD08OLD08 DD ? DD ? ; ;存放系统存放系统8 8型中断向量型中断向量 每隔每隔5555msms执行一条执行一条 JMP CS:OLD08 ;(OLD08) IPJMP CS:OLD08 ;(OLD08) IP ;(OLD08+2) CS ;(OLD08+2) CS 八八八八2021/7/2287 9 99 9 实时时钟中断实时时钟中断 秒秒分分时时日日月月年年内内部部时时钟钟控控制制电电路路1.0241.024K KHZHZ允许周期中断允许周期中断允许报警中断允许报警中断报警中断报警中断 32 32供供INT INT 1AH 21AH 26 6号号功能调功能调用读取用读取, ,预置预置32.76832.768K KHZHZ从从8259 8259 IR0IR0八八九九2021/7/2288秒秒分分时时日日月月年年内内部部时时钟钟控控制制电电路路1.0241.024K KHZHZ允许周期中断允许周期中断允许报警中断允许报警中断报警中断报警中断 32 32供供INT INT 1AH 21AH 26 6号号功能调功能调用读取用读取, ,预置预置32.76832.768K KHZHZ从从8259 8259 IR0IR0中断源:主板上实时时钟电路中断源:主板上实时时钟电路 中断类型:中断类型:7070H H 八八八八2021/7/2289秒秒分分时时日日月月年年内内部部时时钟钟控控制制电电路路1.0241.024K KHZHZ允许周期中断允许周期中断允许报警中断允许报警中断报警中断报警中断 32 32供供INT INT 1AH 21AH 26 6号号功能调功能调用读取用读取, ,预置预置32.76832.768K KHZHZ从从8259 8259 IR0IR0实时时钟中断包括实时时钟中断包括:周期中断和告警中断周期中断和告警中断2 2种,统称种,统称实时时钟中断。实时时钟中断。 八八八八2021/7/2290CMOSCMOS内部有若干存储单元,存放实时时钟信息。基准时钟为内部有若干存储单元,存放实时时钟信息。基准时钟为32.76832.768KHZKHZ,经经3232分频,产生分频,产生1.0241.024KHZKHZ的方波,每的方波,每10241024个方波个方波秒单元加秒单元加1 1,每,每60 60 秒分单元加秒分单元加1 1 八八八八秒秒分分时时日日月月年年内内部部时时钟钟控控制制电电路路1.0241.024K KHZHZ允许周期中断允许周期中断允许报警中断允许报警中断报警中断报警中断 32 32供供INT INT 1AH 21AH 26 6号号功能调功能调用读取用读取, ,预置预置32.76832.768K KHZHZ从从8259 8259 IR0IR02021/7/2291 系统正常工作时,不允许周期中断,不允许告警中断,因此,系统正常工作时,不允许周期中断,不允许告警中断,因此, 正常工作时系统是没有实时时钟中断的!正常工作时系统是没有实时时钟中断的! 八八八八秒秒分分时时日日月月年年内内部部时时钟钟控控制制电电路路1.0241.024K KHZHZ允许周期中断允许周期中断允许报警中断允许报警中断报警中断报警中断 32 32供供INT INT 1AH 21AH 26 6号号功能调功能调用读取用读取, ,预置预置32.76832.768K KHZHZ从从8259 8259 IR0IR02021/7/2292如果需要,可以重新对如果需要,可以重新对CMOSCMOS编程,使之产生周期中断或告警编程,使之产生周期中断或告警中断。中断。 八八八八秒秒分分时时日日月月年年内内部部时时钟钟控控制制电电路路1.0241.024K KHZHZ允许周期中断允许周期中断允许报警中断允许报警中断报警中断报警中断 32 32供供INT INT 1AH 21AH 26 6号号功能调功能调用读取用读取, ,预置预置32.76832.768K KHZHZ从从8259 8259 IR0IR02021/7/2293八八九九系统启动,系统启动,CPUCPU执行执行BIOSBIOS中的一段程序,读取中的一段程序,读取CMOSRAMCMOSRAM中的实中的实时时钟时时钟计数值计数值40:640:6CHCH40:6FH40:6FH做为日时钟计数器的初值。做为日时钟计数器的初值。秒秒分分时时日日月月年年内内部部时时钟钟控控制制电电路路1.0241.024K KHZHZ允许周期中断允许周期中断允许报警中断允许报警中断报警中断报警中断 32 32供供INT INT 1AH 21AH 26 6号号功能调功能调用读取用读取, ,预置预置32.76832.768K KHZHZ从从8259 8259 IR0IR02021/7/2294秒秒分分时时日日月月年年内内部部时时钟钟控控制制电电路路1.0241.024K KHZHZ允许周期中断允许周期中断允许报警中断允许报警中断报警中断报警中断 32 32供供INT INT 1AH 21AH 26 6号号功能调功能调用读取用读取, ,预置预置32.76832.768K KHZHZ从从8259 8259 IR0IR0断电后,实时时钟电路由电池供电,仍连续工作象手表一样计断电后,实时时钟电路由电池供电,仍连续工作象手表一样计 时时,所以称为实时时钟电路,初值在整机售出时调整好!所以称为实时时钟电路,初值在整机售出时调整好! 八八九九2021/7/2295八八九九一一. . 实时时钟中断处理流程:实时时钟中断处理流程:7070H H型服务程序型服务程序 2021/7/2296开中断,保护现场周期中断?事件等待计数器减976s够减?禁止周期中断事件等待标志置0用户等待标志置为80HYYNN:等待时间到报警中断?INT 4AHIRET 系统4AH型中断服务程序向主从8259发中断结束命令恢复现场IRETN8.12 实时时钟中断处理流程 (BIOS 286 84/1/10版)八九 Y2021/7/2297问题:什么是事件等待计数器? 什么是事件等待标志? 什么是用户等待标志?1什么是“事件等待标志计数器” BIOS规定:系统RAM 40:9CH40:9FH这4 个单元为“事件等待计数器”存放用户预置的“等待时间”。 八九 2021/7/22982.什么是“用户等待标志” “用户等待标志”是用户程序附加段中自定义的一个字节型单元。它是70H型服务程序向用户程序传送信息的单元。3.什么是“事件等待标志” “事件等待标志”是BIOS程序的一个工作单元,与用 户程序无关。二.周期中断的开发 欲开发周期中断,需做两项准备工作: 对CMOS重新编程,使之允许周期中断 预置等待时间 这两项工作只需成功地调用INT 15H的83H子功能即可完成。 八九 2021/7/2299 【INT 15H 83H号子功能】 预置等待时间 入口参数: 置AL0,表明是预置等待时间; 置CX、DX等待时间的微秒数,其中CX为高16位 二进数,DX为低16位二进数。 置ES:BX用户等待标志的物理地址。 出口参数: C标志置1,表示预置失败,C标志置0,表示预置成功。 说明:用户等待标志是一个字节型单元,该单元要求设置在用户程序的附加段,该单元偏移地址要求写入BX寄存器。 八九 2021/7/22100 若成功的执行了INT 15H的83H号子功能,意味着:BIOS已经对CMOS重新编程,允许周期中断。打这以后,CMOS才能每隔976s提出一次周期中断请求。CPU响应后转入实时时钟中断处理,对事件等待计数器减976s,不够减时,置“用户等待标志”为80H,通报等待时间到!用户程序查询“用户等待标志”为80H时,转而执行预定的操作。 八九 2021/7/22101例:试验周期中断 编写一个程序,利用周期中断,在程序执行后每隔2秒钟,显示一串字符“TIME TO!”按任意键时停止。 程序清单 ;FILENAME:8101.ASMDATA SEGMENTFLAG DB 00H ;用户等待标志TTT DD 2000000 ;等待时间(微秒)MESG DB TIME TO !,0DH,0AH,$DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATABEG: MOV AX,DATA MOV DS,AX八九 2021/7/22102 MOV ES,AXAGA: MOV AH,83H ;预置等待时间 MOV AL,0 MOV BX,OFFSET FLAG MOV CX,WORD PTR TTT+2 MOV DX,WORD PTR TTT INT 15H JC AGA STISCAN: MOV AH,1 INT 16H JNZ EXIT ;有键入转 CMP FLAG,80H JNZ SCAN ;用户等待标志没置位转DISP: MOV AH,9 MOV DX,OFFSET MESG八九 2021/7/22103 INT 21H MOV FLAG,0 ;用户等待标志复位 JMP AGAEXIT: MOV AH,4CH INT 21HCODE ENDS END BEG INT 21H MOV FLAG,0 ;用户等待标志复位 JMP AGAEXIT: MOV AH,4CH INT 21HCODE ENDS END BEG八九 2021/7/22104三.报警中断的开发 在 CMOS 编程允许报警中断的前提下,当实时时钟达到用户预置的报警时间的时候,CMOS发出报警中断。CPU响应后最终转向报警中断处理程序(即4AH型中断服务程序)。 欲开发报警中断需做两项准备工作: 对CMOS重新编程使之允许报警中断。 预置报警时间。 这两项工作只需先行调用INT 1AH的07H号子功能,然后调用INT 1AH的06H子功能,即可完成。 八九 2021/7/22105【INT 1AH的07H号子功能】 复位报警,为预置报警时 间做准备 入口参数: 无。 【INT 1AH的06H号子功能】 预置报警时间 入口参数: 置CH报警时刻的小时数 (023的BCD码数)。 置CL报警时刻的分钟数(059的BCD码数)。 置DH报警时刻的秒数 (059的BCD码数)。 出口参数: C标志置1,表示预置失败,C标志置0表示预置成功。 八九 2021/7/22106例:试验报警中断 设置报警时间,当实时时钟达到报警时间时,喇叭发出三声短促的音响。注意:为了实验方便,我们令程序执行后5秒钟的系统时间为实时时间。 八九 2021/7/22107 程序清单 ;FILENAME:8102.ASMCODE SEGMENT ASSUME CS:CODEBEG: CLI CALL WRITE4A CALL C_ALARM ;清除报警时间 CALL S_ALARM ;设置报警时间 CALL SETTIME ;设置系统时间 STISCAN: MOV AH,1 INT 16H JZ SCAN ;等待中断 CALL C_ALARM ;清除报警时间 MOV AH,4CH INT 21H八九 2021/7/22108SERVICE PROC MOV CX,3OPEN: IN AL,61H OR AL,00000011B OUT 61H,AL ;接通扬声器 CALL DELAY ;延时CLOSE: IN AL,61H AND AL,11111100B OUT 61H,AL ;关闭扬声器 CALL DELAY ;延时 LOOP OPEN IRETSERVICE ENDP八九 2021/7/22109DELAY PROC PUSH CX MOV AH,86H MOV CX,0 MOV DX,50000 INT 15H POP CX RETDELAY ENDP八九 2021/7/22110 WRITE4A PROC ;设置4AH型中断向量 MOV AX,CODE MOV DS,AX MOV DX,OFFSET SERVICE MOV AX,254AH INT 21H RETWRITE4A ENDP八九 2021/7/22111SETTIME PROC ;设置系统时间AGA: MOV AH,03H MOV CX,1030H MOV DX,0 INT 1AH JC AGA RETSETTIME ENDP;-C_ALARM PROC ;清除报警时间 MOV AH,07H INT 1AH RETC_ALARM ENDP八九 2021/7/22112S_ALARM PROC ;设置报警时间AGAIN: MOV AH,06H MOV CX,1035H MOV DH,05H INT 1AH JC AGAIN RETS_ALARM ENDPCODE ENDS END BEG八九 2021/7/22113四.周期中断和报警中断的区别 相同:都是为用户提供一个时间等待的功能。 不同:时间概念不同 周期中断提供的时间等待功能,其时间概念是“相对时间”,是相对于程序执行时的时间。而告警中断,提供的时间等待功能,是实时时间。 什么是相对时间?实时时间? 如:你午休时要求同室的同学:我睡一会儿,过10 分钟叫醒我,这“10分钟”就是相对时间我睡一会儿,1:30叫醒我,这“1:30”就是实时时间八九 2021/7/22114“等待时间到”的通报方式不同 对于周期中断:等待时间到,BIOS置用户等待标志为80H 对于告警中断:等待时间到,CPU自动转向“4AH型”服务程序 程序的开发方式不同 对于周期中断,用户程序只能查询等待标志,当其为80H时,转而执行定时操作。 对于告警中断:用户应采用中断方式,设计新的4AH服务程序 八九 2021/7/22115 910 键盘中断 中断源:主板键盘接口电路中断类型:9一.键盘中断全过程: 八十 主板键盘接口电路键盘中断IR1 主8259AINTRDB70CPU并行扫描码键盘电路由键盘中断处理程序写入键代码串行扫描码键盘缓冲区40:1E40:3D由INT 16H读取键代码2021/7/22116 1 键盘接口分2部分: 一部分装在键盘盒内键盘电路 另一部分装在主机板键盘接口电路,2 部分 之间通过5芯电源连接。 2 键盘电路以单片机为核心,加电后固化在单片机 内部的键盘扫描程序,不断扫描每一个按健,一 旦有键闭合,就把闭合键的扫描码(位置码) 键盘接口电路。 3 键盘接口电路: 把串行扫描码通过移位寄存器转换成并行扫描码 口地址为60H的端口寄存器 八十 2021/7/22117串并转换完毕,向主8259接中断请求 CPU响应后,转9型服务程序 二键盘中断处理流程 开中断,保护现场(DS压栈) 40H DS 从60H口地址寄存器取并行扫描码分析,处理转 换成2字节键代码存入键盘缓冲区 向8259发中断结束命令 恢复现场 IRET 八十 2021/7/22118三键盘缓冲区 BIOS规定:系统RAM 40:1EH 40:3DH为键盘缓冲区共32个单元,实际使用30个单元,存放15个键的键代码。键盘缓冲区是以“先进先出”的规则存取。 由9型服务程序写入键代码,用户用INT 16H访问键盘缓冲区,键盘缓冲区是9型硬中断和INT 16H软中断之间交换信息的缓冲区 。 注意:CPU执行INT 16H时,在16H服务程序中,DS=40H, 如果此时响应中断,DS的值用户程序数据段的段基址。八十 2021/7/22119四键代码生成 1特殊键状态标志 键盘中断处理程序,从键盘接口电路获取按键扫描码,对其进行分析,区分是字符键还是特殊键。 特殊键是:Ins,Caps Lock,Num Lock,Scroll Lock,Alt,Ctrl,左、右Shift,前四个是开关键。 BIOS规定:系统RAM 40:17H单元为特殊键的键标志单元。用来记录特殊键的状态。键标志单元位结构如下: 八十 2021/7/22120 D7: Ins键 奇数次按下置1,偶数次按下置0。 D6: Caps Lock键 奇数次按下置1,偶数次按下置0。 D5: Num Lock键 奇数次按下置1,偶数次按下置0。 D4: Scroll Lock键 奇数次按下置1,偶数次按下置0。 D3: Alt键 按下置1,抬起置0。 D2: Ctrl键 按下置1,抬起置0。 D1: 左Shift键 按下置1,抬起置0。 D0: 右Shift键 按下置1,抬起置0。 用户程序对40:17H单元直接访问,或者通过INT 16H的02H号功能可以读取键标志单元的信息(101键扩展键盘使用INT 16H的12H号功能调用)。 八十 2021/7/221212. 字符键键代码 键盘中断处理程序判断出按键扫描码是字符键之后,再根据Alt、Ctrl、Shift状态标志,生成两字节的键代码存入键盘缓冲区,用户程序调用INT 16H 10H号子程序可以从键盘缓冲区取出键代码AX寄存器。 下面列举3种键代码格式:对于单一的字符键,键代码高位节为系统扫描码,低位节为代表键意的标准ASCII码。 对于功能键F1F12,以及特殊键和功能键的组合,生成的键代码高位节为扩张码,低位节为0。表8.2仅列出了功能键、光标键和部分组合键的键代码。扩展码, 八十 2021/7/22122按键按键键代码键代码按键按键键代码键代码按键按键键代码键代码F1F103B004400F118500F128600Shift+F1F1054005D00Shift+F118700Shift+F128800Ctrl+F1F105E006700Ctrl+F1189008A00Alt+F1F1068007100Alt+F118B008C0048E050E04BE0Ctrl+ 8DE0Ctrl+ 91E0Ctrl+ 73E04DE0Ctrl+ 74E0表8.2 功能键、光标键和部分组合键键代码(H)八十 2021/7/22123 小键盘操作生成的键代码高位节为0,低位节为 1255。 小键盘操作输入数据的步骤是:先按下Alt键(不要松开)再按下小键盘数字键,当Alt键松开后,即可完成1255数字的输入。同时也在屏幕上生成相应的CRT显示符。图8.15是小键盘操作画出的单线框和双线框。 八十 201205203 187206 185202 188200204186218196194 191179197 180195192193 2172021/7/221243. 键代码测试 编程中你可能要用到一些特殊的符号(例如:黑桃、方块、梅花)和一些特殊的组合键,运行下面两个程序可以得到相应的键代码。 【例8 . 11.1】特殊符号显示程序下列程序执行后,将在屏幕上显示16行,每行显示16个特殊符号,特殊符号的字形代码依次为1255。将字形代码写入AL寄存器,调用INT 10H的0EH号子程序即可。 八十 2021/7/22125程序清单 ;FILENAME:CRTDISP.ASMCODE SEGMENT ASSUME CS:CODEBEG: MOV AX,2 INT 10H ;清屏 MOV DX,0 MOV AL,0LAST: MOV AH,2 INT 10H ;光标定位 MOV AH,0EH INT 10H ;显示一个符号 INC AL ;AL加1 ADD DL,5 ;列坐标加5 CMP DL,80 ;每行显示16个符号八十 2021/7/22126 JNE LAST MOV DL,0 INC DH ;行坐标加1 CMP DH,16 ;共显示16行 JNE LAST MOV AH,4CH INT 21HCODE ENDS END BEG八十 2021/7/22127【例8.11.2】键代码测试程序 下面程序运行后,键入任意键,或任意组合键,即可 显示按键的键代码,该程序按“Esc”键之后,先显示键 代码,然后结束程序。 程序清单 ;FILENAME:KEYCODE.ASM .486CODE SEGMENT USE16 ASSUME CS:CODEBEG: MOV AH,11H INT 16H JZ BEG ;无键入转 MOV BP,0 MOV AH,10H八十 2021/7/22128 INT 16H ;取键代码AX CMP AL,1BH ;Esc? JNE NEXT1 ;No MOV BP,-1 ;YesNEXT1: SAL EAX,16 CALL N2_16 ;显示高位节 MOV AH,0EH MOV AL,/ INT 10H CALL N2_16 ;显示低位节 MOV CX,3LAST: MOV AH,0EH MOV AL, INT 10H LOOP LAST 八十 2021/7/22129 CMP BP,-1 JNE BEGEXIT: MOV AH,4CH INT 21H;-N2_16 PROC ;二十六进制 MOV CX,2AGA: ROL EAX,4 AND AL,0FH CMP AL,10 JC NEXT2 ADD AL,7NEXT2: ADD AL,30H MOV AH,0EH INT 10H ;显示八十 2021/7/22130 LOOP AGA RETN2_16 ENDPCODE ENDS END BEG八十 以上程序执行后依次按下A,B,C,D,EX,Y,Z,1,2,39,0,执行结果见下页2021/7/221311E/41 30/42 2E/43 20/44 12/45 21/46 22/47 23/48 17/49 24/4A25/4B 26/4C 32/4D 31/4E 18/4F 19/50 10/51 13/52 1F/53 14/5416/55 2F/56 11/57 2D/58 15/59 2C/5A 02/31 03/32 04/33 05/3406/35 07/36 08/37 09/38 0A/39 0B/30 01/1B八十 执行结果如下:2021/7/22132
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号