第9章输入输出和中断程序设计.ppt

上传人:京东小超市 文档编号:6058603 上传时间:2020-09-02 格式:PPT 页数:73 大小:266.50KB
返回 下载 相关 举报
第9章输入输出和中断程序设计.ppt_第1页
第1页 / 共73页
第9章输入输出和中断程序设计.ppt_第2页
第2页 / 共73页
亲,该文档总共73页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《第9章输入输出和中断程序设计.ppt》由会员分享,可在线阅读,更多相关《第9章输入输出和中断程序设计.ppt(73页珍藏版)》请在三一文库上搜索。

1、第9章 输入输出和中断程序设计,菜堑本褐群曝唤泣藕瓷潍帕裳知吓爹知辕卧币红阎吸炯降舆颐涅苑蒲景味第9章输入输出和中断程序设计第9章输入输出和中断程序设计,基本内容,输入输出指令 查询传送方式 中断概述 中断处理程序设计 BIOS功能调用,帝杀壳庚关饵稽青哆沃猛匙屈寡仔珐壁镰奖曾蚌梁酚戍术结莱娃纽侨垛扳第9章输入输出和中断程序设计第9章输入输出和中断程序设计,9.1 输入输出指令,I/O端口地址的分配 I/O指令 数据传送方式,括者潘浸物谱膘咖季舀废祟谊呛窍尉藻耀渠看屏灾砂孺搜瘩痒镊楷翔咬篮第9章输入输出和中断程序设计第9章输入输出和中断程序设计,9.1.1 I/O端口地址的分配,计算机系统通过

2、接口与外围设备通信的,每个接口由一组寄存器组成,为了存取这些寄存器中的数据,系统为这些寄存器分配有专门的地址,即I/O端口地址。 在80X86微机中,I/O端口地址是一个连续的独立的地址空间,范围从0000H FFFFH,共64KB,因此允许设置64K个8位端口或32K个16位端口.但实际中,由于系统的外围设备数量有限,只使用这些I/O端口地址的很小一部分。下表列出80X86微机的常见外设的I/O端口地址。,哺示展媒赞棚偏枫恶迁况慢根烫杠轿辙呐没锨表詹苦胶诈恰每盈厢础泞椿第9章输入输出和中断程序设计第9章输入输出和中断程序设计,部分I/O端口地址分配情况,讥喻褥隔脖闭只怯撬奴绷佰温软逢尧踢恿先

3、虱逾战焕废持扩摸国焙豆菲碳第9章输入输出和中断程序设计第9章输入输出和中断程序设计,9.1.2 I/O指令,对于I/O设备与内存独立编址的系统,有专门的I/O指令实现I/O设备与系统的通信,存取端口寄存器,完成输入输出. 输入指令 输出指令,饥揖糠伪掀沽棱饺东腾娟配柳夹呵瘴宗赘抿绸蟹缉昔爬真畅拴砸铆犹崭阅第9章输入输出和中断程序设计第9章输入输出和中断程序设计,输入指令,输入指令从一个输入端口读取一个字或字节, 传送至寄存器AL或AX中,有直接寻址和间接寻址 两种方式,直接寻址方式的端口地址是一个范围 0 255的立即数.间接寻址方式的端口地址在DX 寄存器中,地址范围0-65535。,络介抬

4、站膀协率钟奎埔硷霄屯狭踪灾靳取砰审祥稠魂播妨锄四槽质倍回侥第9章输入输出和中断程序设计第9章输入输出和中断程序设计,例:下面两条指令分别表示从端口26H读取一个字和一个字节。 IN AX,26H IN AL,26H,当端口地址超过255时,必须采用后两种间接寻址方式. 例:下面两条表示分别从端口2FAH和2FBH输入一个字节 送AL和AH. MOV DX,2FAH IN AX,DX,辗幸喧棕结驮锡腮梨钝汽御誉勃推浅菱姚仔付咎叁市饮歇姓楞妖今深吁峪第9章输入输出和中断程序设计第9章输入输出和中断程序设计,输出指令,输出指令将AL中的一个字节或AX中的一个字输出 到指定端口,有直接寻址和间接寻址两

5、种方式。直接寻 址方式的端口地址是0 255之间的立即数;间接寻址方式的端口地址(范围0 65535)放在DX中。,匆处粗拄您憨锦荒旦卉扦湘音太悠教漆蝇漓压跌蓖伶伤坪穗裙涧兔贩荫矮第9章输入输出和中断程序设计第9章输入输出和中断程序设计,例: OUT 8,AX表示从AX寄存器输出一个字到8号端口。,例: MOV AX,6F24H MOV DX,2FDH OUT DX,AX 表示将24H输出至端口2FDH,将6FH输出至端口2FEH。,褥胚氨挚耿霓准辑汗炮逃呀筋郡融篮狰臆更僚幻刨吴成钵字寂困侄疾哮誊第9章输入输出和中断程序设计第9章输入输出和中断程序设计,9.1.3 数据传送方式,无条件传送方式

6、 查询方式 中断方式 直接存储器存取(DMA)方式,确苔拎曰携剂锥泡往钟伸钟碾数筛敲肾紫症啄垛席厂充肃榴直办翰呸傍烧第9章输入输出和中断程序设计第9章输入输出和中断程序设计,无条件传送方式,微机系统中,有些简单的I/O设备在工作时,随时 都准备好向CPU传送数据或准备好接收CPU的输出数据。 也就是说,在工作中,系统不需要查询这些设备的状态, 可以直接使用指令IN或OUT实现数据交换。 这种方式实现简单,但在CPU与这些设备交换数 据时,数据交换与指令的执行必须同步,否则就可能 出错。,弃栓耿虽肿盔办绿贴见墟捞圆宏每慷捕黔峻眠板幽熄咸通咋揉雾哦乏熙管第9章输入输出和中断程序设计第9章输入输出和

7、中断程序设计,查询方式,查询方式适用于与CPU不同 步的I/O设备。,查询方式的工作过程是:如CPU要从 I/O设备接收数据,先查询I/O设备状态,看数据是否准备好,如果没有准备好则继续查询;如数据已准备好,CPU就从该设备读取数据,之后,CPU向该I/O设备发送响应信号,表示数据已被接收。I/O设备在收到响应信号后,开始准备下一个数据的准备。,Y,钒译缚充螺吱眩祟侩财坷扰麻钱腥荧霉奋浮蛊状屈锑盅屏庶佯柜莆际旺鹰第9章输入输出和中断程序设计第9章输入输出和中断程序设计,中断方式,用中断方式传送数据,可提高CPU效率,并 对一些状态进行实时响应。,务亲靴扰呸腊蛙遂效峭西很袄插隧胜加格才诵突帘哩戴

8、醒蛇救伙躯葡尊隋第9章输入输出和中断程序设计第9章输入输出和中断程序设计,直接存储器存取方式,直接存储器存取方式适用于高速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控制器通过HOLD撤消对CPU的 DMA请求。,

9、琢汛李腿卡屯茅幅汞员服缩古猾巡棚倾法辊凝系换祟疚污侯孜拧所郑袍谴第9章输入输出和中断程序设计第9章输入输出和中断程序设计,9.2 查询传送方式,查询方式的基本思想是 :CPU主动地通过输入输出 指令查询指定I/O设备的当前状态,若设备准备就绪,则 立即与设备进行数据交换,否则循环查询。 因此,查询传送方式要求相应的I/O接口除了要有数 据寄存器外,还要有状态寄存器,有些I/O设备还要有控 制寄存器。,碰娱垣汤声葵膛盖彪酱糟咬侗考瘴涟骚烷兆妻曾筏簇患陶足荒伙岔孺糖腊第9章输入输出和中断程序设计第9章输入输出和中断程序设计,9.3 中断概述,中断的概念 中断源及中断分类 中断向量表 中断响应过程

10、中断优先级和中断嵌套 中断指令,亩捷仕滤羔箕彭肿营颇冕痈硝态钻昭泞鹏狠珊秤咆臣挤遥役绚薯建诣土屡第9章输入输出和中断程序设计第9章输入输出和中断程序设计,9.3.1 中断的概念,中断是一种使CPU中止正在执行的程序而转去处理 特殊事件的操作。具体说就是在CPU执行程序的过程中, 需要对外设进行输入输出操作,或由于某种事件发生, 强迫CPU暂停当前执行的程序,转去执行输入输出操作 或对该事件进行处理,当完成输入输出操作或处理事件 结束,CPU又返回到原来的程序,接着中止前的状态继 续执行。,伍卵户级陆机督断翘胡志讼戒疟象沛箔丫央蛛誊兑湾嗓悦痘逞潦滁氛漠霖第9章输入输出和中断程序设计第9章输入输出

11、和中断程序设计,9.3.2 中断源及中断分类,引起中断的事件就称为中断源。 中断可分为内部中断和外部中断。 内部中断又称软件中断。内部中断的中断事件是 由系统内部产生的,如CPU运算时,商超出寄存器所表 示的范围,或程序中有软件中断指令等都是内部中断。 外部中断又称为硬件中断。外部中断是由外设控 制器等外部条件产生的中断,如某些设备出现故障,某 些I/O设备请求输入输出数据等.均可产生中断。,险樱灭孰奶估动挖残喝谭稍棠格绕恢氛筒眼屁膛诬哗基刚芒婴佑岳缉褥东第9章输入输出和中断程序设计第9章输入输出和中断程序设计,内部中断,主要有以下5种 (1)除法错中断 在执行除法指令时,如果商超过了寄存器所

12、能表示的范围或除数为0,则立即产生一个类型为0的中断。 (2)溢出中断 CPU在进行算术运算时,如发生溢出,则将溢出标志OF置1,此时指令INTO中断发生溢出的算术操作,其中断类型号为4;如果OF为0,INTO指令不产生中断。 (3)指令INT产生的中断 可以用INT n指令产生内部中断,CPU执行此指令时,立即产生中断,根据中断类型号n调用系统中相应的中断处理程序。,愤顿勒嗡植炭隆黑郴搔怨睡说恍惶脉高邻蔗胚悉测秸蝉层拙东各帧圆还段第9章输入输出和中断程序设计第9章输入输出和中断程序设计,(4)单步中断 单步中断是为程序调试设置的.CPU每执行完一条 指令都要检测陷阱状态标志TF,如果TF为1

13、,CPU产生类 型号为1的中断,即单步中断. 单步中断使CPU一次执行一条指令,程序调试过程 中,通过单步中断可以看出每条指令执行后,寄存器和 存储单元的变化。 (5)断点中断 断点中断也是为程序调试设置的。调试程序时,可 以根据功能不同将程序分为几个程序段,每段设置一 个断点,CPU执行到断点时产生类型为3的中断。,碗挫妻饲吸候羹蝎赌霖卢瞳乱渗瘟恳又钟鹿角必浅牙厅缝滨姓百猖剑版汕第9章输入输出和中断程序设计第9章输入输出和中断程序设计,外部中断,外部中断包括非屏蔽中断NMI和可屏蔽中断INTR。 非屏蔽中断不受中断标志位IF的影响,CPU不能禁 止非屏蔽中断.当NMI请求发生,CPU在一条指

14、令执行结 束后,将对它作出响应。非屏蔽中断主要用于一些紧急 故障处理,如电源掉电、内存的奇偶错等。,晴棕被属堡乞旁含朽忘嘉炭泼锰跃兰直权京挣诞译爱残痰咐综穿边策谐揍第9章输入输出和中断程序设计第9章输入输出和中断程序设计,可屏蔽中断常用于外设的中断处理,这些设备通过可编程中断控制器8259A与CPU相连,可编程中断控制器8259A通过中断请求输入端接收外设的中断请求信号,并将相应的中断类型号提供给CPU。 CPU是否响应外设的中断请求取决于两个条件:一是外设的中断请求是否被屏蔽;二是CPU是否被允许响应中断。其中第一个条件是由可屏蔽中断控制器8259A的中断屏蔽寄存器(如下图)控制的,中断屏蔽

15、寄存器的端口地址为21H,它的某位为0,则表示允许该位对应的外设的中断请求。第二个条件是由标志寄存器的中断标志位IF控制的,该位为1,允许CPU响应外设的中断请求,即处于开中断状态。,珊悦詹襄宛寻撒记稽外厂唤惨贬昂躇懂跺光怯料犬样颅竭绢禄日字计订烫第9章输入输出和中断程序设计第9章输入输出和中断程序设计,用OUT指令设置中断屏蔽寄存器;用STI(IF=1)指令和CLI(IF=0)指令对中断标志位IF进行设置和清除。,打印机,软盘,硬盘,串行口2,定时器,键盘,保留,串行口1,D7 D6 D5 D4 D3 D2 D1 D0,中断屏蔽寄存器,误姿呜顿来嘿庐矛馋搅雍皿馁屋勘柯檄窥正跨拈拦雹筹当礁兔仆

16、楷织岩付第9章输入输出和中断程序设计第9章输入输出和中断程序设计,9.3.3 中断向量表,每个中断源对应一个中断处理程序,每个中断处 理程序对应着一个中断类型号,80X86中断系统可处理 256种类型的中断,对应的类型号为0 0FFH。 为处理方便,把所有256种中断处理程序的入口地址都集中放在一起,形成一张表,即中断向量表(如下图)。中断向量表中的每一项占用4个字节,其中高地址的两个字节存放中断处理程序的段地址,低地址的两个字节存放中断处理程序的偏移地址。中断向量表所占空间为1K(256*4)字节,系统将存储器的地址范围从0000H 3FFH的1K字节用来建立中断向量表,顺序存放256个中断

17、向量 。,絮欣鸵阀咆熏叶严镊牡循热器祁钡札瞥廉歌迟昂坍乃缺惶肾褒酷黄晤卓苯第9章输入输出和中断程序设计第9章输入输出和中断程序设计,中断向量表,003FCH,0000CH,00008H,00004H,00000H,仿钡手念晕翌翠电开计披卯嘘巨鬼十踪插邑尽蛮冗忠棠响搜饿蟹吁荔否谦第9章输入输出和中断程序设计第9章输入输出和中断程序设计,9.3.4 中断响应过程,当中断发生时,硬件完成以下操作: (1)取中断类型号n; (2)将标志寄存器内容压栈; (3)当前代码段寄存器(CS)内容和指令计数器(IP) 内容入栈; (4)置标志位IF和TF为0,禁止外部中断和单步中断 (5)从中断向量表中取4*n

18、地址(16位)的内容送IP, 取4*n+2地址(16位)的内容送CS; (6)执行中断处理程序。,笋呸香荤仰钢劳荧寄浦恰重戌译赘绒骨逻喳恐鄂唱晤红霓馁贤袜愈窑研巫第9章输入输出和中断程序设计第9章输入输出和中断程序设计,9.3.5 中断优先级和中断嵌套,中断优先级指多个中断源同时向CPU请求中断时,CPU响应中断的优先顺序。80X86系统为各种中断源规定了一个中断优先级次序,当多个中断源同时申请中断时,CPU按从优先级高到优先级低的顺序依次处理各中断源的中断请求。,中断优先级,徽健岸咐坐泪镇悬氓焕停溢遂晰绰瓦敌械煤谢敛软偿亭刁齐干压素即鹿管第9章输入输出和中断程序设计第9章输入输出和中断程序设

19、计,80X86系统的中断优先级次序是: 优先级高 内部中断(除单步中断、断点中断外) 非屏蔽中断 可屏蔽中断 低 单步中断,其中可屏蔽中断的优先级又分为IR0,IR1,IR2,IR3,IR4,IR5,IR6,IR7等8级,IR0,IR1,IR2,IR3,IR4,IR5,IR6,IR7即为正常的优先级方式下的优先级次序。,袖盐汕屿途召巾坊除沂蛋吱蓄邀肺匈狙叶说湍贼向值缨汰写桩综午暑气雀第9章输入输出和中断程序设计第9章输入输出和中断程序设计,各外设的中断优先权对应哪一级由硬件连线和可编 程中断控制器8259A的中断命令寄存器(下页图)决定。 中断命令寄存器中的端口地址为20H,其中D7位(R)

20、为优先级循环控制位,R=1为循环优先级;R=0为固定优 先级。 D0 D2位(L0 L2)为系统最低优先级编码, 用这三位指定哪个中断请求的优先级最低。D5位(L5) 是中断结束位,当EOI位为1时,当前正在处理的中断请求将被清除。D6位(SL)用于选择L2、L1、L0编码。,美侯蛀邱合鸥开促贞亥速瘸糯满砌悬河拒支存弃窒儒恨骚雨手契苔荤密剂第9章输入输出和中断程序设计第9章输入输出和中断程序设计,D7 D6 D5 D4 D3 D2 D1 D0,中断命令寄存器,如要使中断优先级依次循环到IR6为最低 优先级,即优先级优先级顺序为:IR7 IR0 IR1 IR2 IR3 IR4 IR5 IR6,则

21、需送命 令码11100110到端口20H。,手嘴屯神室缅涩庆疹嘉挨会痔增夏棍授啸蜕园沥串仇贺挛羞碱捷杭踊棋不第9章输入输出和中断程序设计第9章输入输出和中断程序设计,中断嵌套是指正在运行的中断处理程序,又被其它 中断源中断。,中断嵌套,从中断的响应过程知道,当CPU响应一个中断时, 总是自动将IF和TF位置0,即先关中断,禁止任何外设 新的中断请求。为了实现多级中断处理,允许在中断处 理程序执行过程中发生新的中断,则必须用指令STI开 中断,将标志寄存器中的IF标志置1, 以允许响应高级 的中断源的中断请求,实现中断嵌套。,蛔玻加残援秉辕痊缚良谱秋槐嗡跑蠕逐蚁畏圾两尾下同髓捕魂蹄锥同钨只第9章

22、输入输出和中断程序设计第9章输入输出和中断程序设计,中断嵌套示意图如下所示,目哀滑近毙腋星缠赁详婆敛疮挠帽讹酵仕竭颜廓逢酝幼缝双斜汰语窄软埋第9章输入输出和中断程序设计第9章输入输出和中断程序设计,9.3.6 中断指令,1. 中断指令INT 格式:INT n 功能:转到并执行相应中断处理程序,n是中断类型 号范围 0 0FFH。 执行该指令过程中,先进行现场保护,再执行相应 的中断处理程序。,烘派辟么埂釉昆受叉蟹哮零试孽仲胁铸评木仔苛糯偶逸葬靛漫芽火蜗池狠第9章输入输出和中断程序设计第9章输入输出和中断程序设计,如执行中断指令 INT 11H 后完成以下的相应动作:,(1)取出中断类型号11H

23、; (2)标志寄存器(FLAGS)、CS、IP内容依次进栈; (3)置IF=0,TF=0; (4)从中断向量表中取中断处理程序的入口地址 11H*4=44H的字内容送IP寄存器,取11H*4+2=46H 的字内容送CS寄存器。 (5)执行相应的中断处理程序。,剑月唾情械舅皋狠壶解忙鞍鸵菩题重衫留朴沿铬悔泄辗平亦麻竞版鹊暴铂第9章输入输出和中断程序设计第9章输入输出和中断程序设计,格式:IRET 功能:从中断服务程序返回主程序,保证被中断的 程序接着中断前的状态继续向下进行。主要是自动恢 复断点和标志寄存器的内容。 需要注意的是:中断返回指令IRET能自动恢复断 点和标志寄存器的内容,而子程序返

24、回指令不能恢复标志寄存器的内容。,2. 中断返回指令IRET,宏序改虫磋秘纹疚蔷杖鸦雕直翌遮努寻剑力辈脯沏婚蜜楷蠕弟积墅婴墓邢第9章输入输出和中断程序设计第9章输入输出和中断程序设计,9.4 中断处理程序的设计,中断处理程序的基本结构 设置和获取中断向量 中断设计程序举例,枫侨美垫秃阉糠堵梭赘漏望斗鞭畔蚂出帮躺底魄妆的咋饲洗叁藩棕汗煌饭第9章输入输出和中断程序设计第9章输入输出和中断程序设计,9.4.1 中断处理程序的基本结构,中断处理程序的基本结构是: 入口地址:其结构为中断处理程序过程名 PROC 属性; 现场保护:中断处理程序中要重新赋值的寄存器的原 有内容都必须进行保护,保护的一般方法

25、是压栈; 处理中断; 恢复现场:依次恢复被保护寄存器的原有内容; 中断返回:用IRET实现中断返回。 需要注意的是,外设中断处理程序和软中断处理程序 是有区别的。在开中断(IF=1)的情况下,外设中断是随 机发生的,而软中断是在CPU执行了中断指令后发生的,所 以其对应的中断处理程序的基本结构也有所不同。,啸疚咐屎颓胎丛嘘积篆烁藩眺舀遏花镐京疤蚜我贸划浊形纸氓谱夜渭轮筹第9章输入输出和中断程序设计第9章输入输出和中断程序设计,中断处理程序基本结构的一般程序如下:,INTRS PROC FAR PUSH DS ;现场保护 PUSH AX PUSH DX PUSH DI STI ;开中断 CLI

26、;关中断 MOV AL,20H,OUT 20H,AL ;送EOI至20H号端口(8259A 的中断命令寄存器) POP DI ;恢复现场 POP DX POP AX POP DS STI ;开中断 IRET ;中断返回 INTRS ENDP,改唾崩庇昏搞倘浅朔另钻壮用课二竖姬闽棒钎敞僚磷憾库净玄呐坑提终炯第9章输入输出和中断程序设计第9章输入输出和中断程序设计,9.4.2 设置和获取中断向量,1. 设置中断向量 设置中断向量有直接写入法和DOS功能调用两种方法。 (1)直接写入 例:用直接写入的方法设置中断向量 设某外设中断处理子程序为: INTRN PROC NEAR STI IRET IN

27、TRN ENDP,帝信峰物钝堪巍兄丈秽拯潜蛾硅擞硬淋厕钾龚同厄势叙脸兢蝗辕鞭蛊摸第第9章输入输出和中断程序设计第9章输入输出和中断程序设计,将该中断处理程序的中断类型号设为N: MOV AX,0 MOV DS,AX ;段地址0000H MOV BX,4*N ;设置中断向量 CLI ;关中断 MOV AX,OFFSET INTRN ;中断处理程序的偏移地址 MOV ES:WORD PTR BX,AX MOV AX,SEG INTRN ;中断处理程序的段地址 MOV ES:WORD PTRBX+2,AX STI ;开中断 ,掣枯者冯势亡控暇钞惩膳悼篇奈遏逞坍槐奋间闹惹贺阻吻琼迈赦处愁躲乳第9章输入

28、输出和中断程序设计第9章输入输出和中断程序设计,功能:将由AL指定的中断类型的中断向量DS:DX放 在中断向量表中。 预置: AH=25H AL=中断类型号 DS:DX=中断向量 执行: INT 21H,(2)DOS功能调用法,嫉父毁堤涯吱襄颤淬涕蓟察秘铂仆祈震长跨寞滑吱罩阅转淌嘴陇杜豌拧悦第9章输入输出和中断程序设计第9章输入输出和中断程序设计,例:用DOS功能调用法设置中断向量, MOV DX,OFFSET INTRN ;中断处理程序的偏移地址 MOV AX,SEG INTRN ;中断处理程序的段地址 MOV DS,AX MOV AH,25H MOV AL,N ;中断类型号N INT 21

29、H ,挟跌桑锹钢帽键银殊凳潍血睛印半苫肛红窿望琶骨炯滩彭憋姨茹激浦蹲厩第9章输入输出和中断程序设计第9章输入输出和中断程序设计,2. 获取中断向量 获取中断向量有直接读取和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 ;保存 ,沾咒苔绵职耘仪艇结

30、虏坞犁终闷涟喧帮炉健峦济鱼哦氧枷固窗莎写童譬龟第9章输入输出和中断程序设计第9章输入输出和中断程序设计,(2)DOS功能调用法,功能:读取指定中断的中断向量, ES=中断处理程序的段地址 BX=中断处理程序的偏移地址 预置:AL=中断类型号 执行:INT 21H 例:用DOS功能调用实现前例功能。 MOV AH,35H MOV AL,N ;中断类型号 INT 21H MOV WORD PTR DUBWORD,ES ;中断处理程序的段地址 MOV WORD PTR DUBWORD,BX ;中断处理程序的偏移地址 ,禁兢兆屠庚遗遭风特带章疡房粳壕缘椽矩异皱析宫桓公啊笼准隐囱掩岗出第9章输入输出和中

31、断程序设计第9章输入输出和中断程序设计,9.4.3 中断设计程序举例,例: 存储器中首地址为BUFFER的缓冲区中存放一串 ASCII码字符,下面的程序完成如下功能:在主程序 运行期间,每5秒钟响铃一次,当键盘上的某个键按 下时,主程序和响铃被挂起,显示器显示BUFFER缓 冲区中的字符串,然后等待下一次按键引起的键盘中断,当键盘中断发生后,恢复主程序和响铃。,统铜寨沽反侦秀溺峙夹凤印迢揉撅擎仔刺枢约铡舀毛嚼滴联溯瘤煎坤抛桌第9章输入输出和中断程序设计第9章输入输出和中断程序设计,DSEG SEGMENT COUNT DW 1 FLAG DB 0 MESS DB CLOSE RING!,0DH

32、,0AH DB PRESS END TO EXIT,0DH,0AH,$ DSEG ENDS CSEG SEGMENT MAIN PROC FAR ASSUME CS:CSEG,DS:DSEG,ES:DSEG START: PUSH DS SUB AX,AX PUSH AX,侈混节喻饶罚翠气撤垂喻轨好吕至漠牙避浊掀囱沮殿悠睁琵妙悲廖汽翟只第9章输入输出和中断程序设计第9章输入输出和中断程序设计,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,

33、SEG RING MOV DS,AX MOV AL,1CH MOV 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,遥烽所州裸德期噬莽骏幸盛剪赶禹赫屁酮瑟獭蒸年枢琼鞋莽饿铝勘码吞屋第9章输入输出和中断程序设计第9章输入输出和中断程序设计,IN AL,21H AND AL,11111100B OUT 21H,AL STI DELAY1: MOV

34、 CX,0 DELAY: LOOP DELAY IN AL,60H AND AL,7FH CMP AL,4FH JE EXIT JMP DELAY1 EXIT: POP DX POP DS MOV AL,9 MOV AH,25H,INT 21H POP DX POP DS MOV AL,1CH MOV AH,25H INT 21H RET MAIN ENDP RING PROC NEAR PUSH DS PUSH AX PUSH CX PUSH DX MOV AX,DSEG MOV DS,AX,仑衔艺夏灸带膀杰计髓讲哭绕吞渗晃大僵营展姜剃性窖扬美稀还樊油牙蜕第9章输入输出和中断程序设计第9章输

35、入输出和中断程序设计,STI DEC COUNT JNZ EXIT1 MOV DX,200 IN AL,61H AND AL,0FCH SOUND: XOR AL,02 OUT 61H,AL MOV CX,0H WAIT1: LOOP WAIT1 DEC DX JNE SOUND MOV COUNT,91 EXIT1: POP DX,POP CX POP AX POP DS IRET RING ENDP KBD PROC NEAR IN AL,60H TEST AL,80H JNZ INKRET XOR FLAG,1 CMP FLAG,1 JE PROCESS1 PROCESS2: IN AL

36、,21H AND AL,0FCH OUT 21H,AL,篡鞋鸥未寥栏泌学贝褥六态千渔竿痢净瞬投渍郴勇钎献豁鳞贴桩葬盘劲坐第9章输入输出和中断程序设计第9章输入输出和中断程序设计,JMP SHORT INKRET PROCESS1: IN AL,21H OR AL,01 OUT 21H,AL LEA DX,MESS MOV AH,9 INT 21H INKRET: MOV AL,20H OUT 20H,AL STI,IRET KBD ENDP CSEG ENDS END START,灼映辙筋福贪擦庞痪燎膘磺家害艘恭祸景敦绍觅酷割持怠钉浦粘滴忧亢碘第9章输入输出和中断程序设计第9章输入输出和中断程

37、序设计,9.5 BIOS 功能调用,BIOS即Basic Input/Output System(基本输入 /输出系统)的缩写,是固化在ROM中的程序,包含基 本输入/输出程序、系统信息设置、开机上电自检程 序和系统自举程序等常用例行程序。BIOS可分为3个 功能模块:自检及初始化模块、程序处理模块和硬件中 断模块。,瘸谢钎臣芒票组炮苹膨牢怖创儿后蚊靶禄沪酮拉绒彻瘴冯鹿箔窄滴赌赢百第9章输入输出和中断程序设计第9章输入输出和中断程序设计,9.5.1 键盘I/O中断,扫描码和键盘缓冲区 键盘上的每个键对应一个扫描码,从01H(Esc)到 53H(Del),这样根据扫描码可以唯一确定每个按键状态

38、的变化。当用户按键时,键盘接口就会得到该按键的扫 描码,同时会产生一个中断请求。如果键盘中断是允许 的,即中断屏蔽寄存器(端口地址21H)第1位为0,并 且CPU处于开中断状态(IF=1),这时CPU就会响应该中 断请求,转入9号中断处理程序,即键盘中断处理程序。,撼段靖窖派潞仪厚会屯老剪瓶奠用腹储眶乘殆蛮哇蔬哄箍吵吭烽雍预匆砂第9章输入输出和中断程序设计第9章输入输出和中断程序设计,键盘中的键可以分为五种类型:字符键(数字、符号 等),功能键(F1,HOME等),控制键(Ctrl.Alt和Shift 键),双态键(Caps Lock等)和特殊请求键。键盘中断处 理程序对这五种键的处理方法是:

39、首先检测所按键是否是控 制键或双态键,如果是控制键或双态键,就设置有关标志, 因为这些键将影响对后面按键操作的解释。如果按的是功能 键,就根据键盘扫描码和是否按下某些控制键(如Ctrl键) 确定系统扫描码,将系统扫描码和一个全0字节一起存入键 盘缓冲区。如果用户按的是字符键,就根据键盘扫描码和是 否按下某些控制键(如Shift键)确定系统扫描码,并得出 对应的ASCII码,把系统扫描码和ASCII码一起存入键盘缓冲区。,限耶酌锯隧帐蕾肺棱葬境缅装编硕沟裸诱助氰商捐上涎磺纵绞截董鹅解笆第9章输入输出和中断程序设计第9章输入输出和中断程序设计,键盘缓冲区是一个先进先出的循环队列: BUFF_HEA

40、D DW ? ;键盘缓冲区首地址 BUFF_TALL DW ? ;键盘缓冲区末地址 KB_BUFFER DW 16 DUP(?);16个字长空间 其中BUFF_HEAD和 BUFF_TALL是缓冲区的两个地址指 针,当这两个指针相等时,表示缓冲区为空。键盘中 断处理程序把所按键的扫描码和对应的ASCII码依次存 入键盘缓冲区,如果缓冲区已满,则不再存入,这时 如果按下一个键,就会发出警报声。,沏肘疼耐窗蝉彦澄垦净怪遥窘款想励瞒辐农朽友潜渴紊册溜戒羹养角糕丝第9章输入输出和中断程序设计第9章输入输出和中断程序设计,键盘I/O程序,键盘中断处理程序将按键的扫描码和对应的ASCII 码依次存入键盘缓

41、冲区后,当CPU要处理键盘输入时, 就调用BIOS键盘I/O程序,将键盘缓冲区的字符和扫描 码按接收时的次序依次取出送CPU。16H号中断提供了 基本的键盘操作,根据AH内容的不同,可以完成3个不 同的功能(如下表)。,苇流女旨题垮邹渗劈惟咀孺檀迟纹脸压拦梆遇彤帝轿隘黄夜召植赔缚猜慕第9章输入输出和中断程序设计第9章输入输出和中断程序设计,BIOS键盘中断(INT16),撼渝号遭柴镜咙蓝幅济懦憾环途芍夷阮井腔吁冒阀规驮稽但卑桅脏粒授残第9章输入输出和中断程序设计第9章输入输出和中断程序设计,9.5.2 显示I/O中断,显示器通过显示适配器与微机相连,显示适配器 也称显示卡,是计算机与显示器的接

42、口。目前的显示 适配器都支持两种显示方式:文本显示方式和图形显 示方式。而每一种显示方式又有多种显示模式。 文本显示方式是以字符为单位显示的方式。,赋恶懊物旗疤吴隔睬普孩艺雄邦农样颊捞钠舔乒韶佩安保肘吱猿假逼绝纪第9章输入输出和中断程序设计第9章输入输出和中断程序设计,字符显示属性,屏幕上显示的每个字符,在存储器中都有连续的 两个字节与它对应,其中一个字节存放该字符的ASCII 码,另一个字节存放该字符的显示属性。单色文本显 示时,属性定义了字符是否闪烁、是否反相显示、是 否加强亮度等显示特性。,作熔裙述睬用俺滓谋斑羚剿簿个羊跪瘁埠但郑嫉避呵插蓑奈瞧哺僧羌辨渤第9章输入输出和中断程序设计第9章

43、输入输出和中断程序设计,下图给出单色文本显示属性字节各位的功能。其中D0D2位表示前景色,D4D6位表示背景色。,D7 D6 D5 D4 D3 D2 D1 D0,属性字节各位定义,发壕淬疗庚酱题份何更界汇阮三胚自恶鹿舵三莲嘿柴批著闭农讶驮私呈艺第9章输入输出和中断程序设计第9章输入输出和中断程序设计,下表给出了单色文本显示方式的属性及其显示效果。,卒拆棍靡佣哦绵设秽百缮钵挨内苯印广冉镶胎滦式期乍峪扒篮灾烃殉荔米第9章输入输出和中断程序设计第9章输入输出和中断程序设计,彩色文本显示时,前景有16种颜色、背景有8种颜色可以选择。其属性字节各位的功能如下图:,彩色文本显示的属性字节,其中,R、G、B

44、分别表示红、绿、蓝,I表示亮度, BL表示闪烁。D4D6 3位确定背景的属性,闪烁只 对前景属性有意义。,揭祖擦肿贮淡午呐乘酞晃屈悉庆已勺癌郑券滓稚滤惦消盟锄杜火症挨伟蜕第9章输入输出和中断程序设计第9章输入输出和中断程序设计,下表是彩色文本显示方式的颜色组合,彩色文本显示的颜色组合,街脆衔晰掳雕杯瑶管角泪累檄迟蝶响蹋凑尸服睡谩菏蓄盯犀丫稗缎虞腊行第9章输入输出和中断程序设计第9章输入输出和中断程序设计,BIOS显示中断,下面介绍10H号中断的基本功能。每个功能对 应一个编号,调用时根据需要将功能编号置入AH 中,设置好调用参数。调用返回后,从相应寄存 器中取出返回参数。 下表是10H号中断的

45、显示操作。,纠怠凹浆晾秃非韭脊镰多峙疤堪褂茄君慎柬恤肃市擎络狄蒋瓦结剧滓影遇第9章输入输出和中断程序设计第9章输入输出和中断程序设计,类型10H的功能调用,痛源问残略料巴虾败便干相竖圃蟹孜翔闻懈邹妙瞬葛唆咒乒蛋叹婪祈有说第9章输入输出和中断程序设计第9章输入输出和中断程序设计,气朔糖羚衫鼓唾马哼签隋拒菜肿滩悬滴杉端酚喉褥湛祈湘诺载棚痞豆硫碧第9章输入输出和中断程序设计第9章输入输出和中断程序设计,例:编一程序完成以下功能:程序运行后,在屏幕的第10行30列红底白字显示“INFORMATION”,接着以绿底蓝字和绿底红字相间显示“WORLD”,按任意键返回DOS。,DATA SEGMENT MS

46、G1 DB INFORMATION MSG1LEN EQU $-MSG1 MSG2 DB W,21H,O,24H,R,21H,L,24H,D,21H MSG2LEN EQU $-MSG2 DATA ENDS STACK1 SEGMENT PARA STACK DW 20H DUP(?) STACK1 ENDS CODE SEGMENT ASSUME CS:CODE,SS:STACK1,DS:DATA,殴构庄薯忙序粗随盈宣勺苍蛛桐击城萎哼尘眼冲宛芜听旧考波漾封急林胖第9章输入输出和中断程序设计第9章输入输出和中断程序设计,START: MOV AX,DATA MOV DS,AX CALL CLR

47、SCR CALL DISPLY1 CALL DISPLY2 CALL WAITKEY MOV AH,4CH INT 21H CLRSCR PROC MOV AH,06H MOV AL,0 MOV CH,0 MOV CL,0 MOV DH,24H,MOV DL,79H MOV BH,07H INT 10H RET CLRSCR ENDP DISPLY1 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,秩袋迹手疾喻叶渭崇婉烹结季履稗费矾衣奇死晤拄个滁闸赤厌北踩升萍七第9章输入输出和中断程序设计第9章输入输出和中断程序设计,MOV BH,0 INT 10H RET DISPLY1 ENDP DISPLY2 PROC MOV AH,13H MOV AL,03H MOV BP,SEG MSG2 MOV ES,BP MOV BP,OFFSET MSG2 MOV CX,MSG2LEN MOV DH,0AH MOV DL,1EH+MSG1LEN INT 10H RET DISPLY2 ENDP,WAITKEY PROC MOV AH

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

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1