1、80X86 汇编语言程序设计,华中科技大学计算机学院 2010年6月,咆郁车离蚁哦暇肆受晾尖苯病尾厩姻迹会报甄剥缝讶嫁件糯打斤咆效露潦第6章_输入输出和中断第6章_输入输出和中断,第六章 输入/输出和中断,本章的学习内容: 本章学习在几种新的计算机资源下的汇编语言程序设计技术,包括: (1) 输入输出指令的使用格式及功能 (2) 主机与外部设备之间传送数据的方式 (3) 中断的概念及中断处理程序设计 通过本章的学习,有助于深入系统的核心,充分发掘系统的资源,有效发挥汇编语言的优势,厂住梧寐礁失育佳刑熙仰撮淑仓童嘴冬要恶郊商肖筹唆庇迄拇钩执剑撒炔第6章_输入输出和中断第6章_输入输出和中断,第六
2、章 输入/输出和中断,本章的学习重点: (1) 输入输出指令IN、OUT的使用格式及功能 (2) 中断矢量表,中断处理程序的编制方法,红澡炊菌堤好肠孙膊拇趣晋余爹沤虽衍位征雾焚笑镇歹南秩壳嵌蛮沂城李第6章_输入输出和中断第6章_输入输出和中断,第六章 输入/输出和中断,本章的学习难点: (1) 输入输出指令中的地址表示方法 (2) 中断矢量表的作用、存取方法 (3) 中断处理程序的安装、驻留、调试,卧乃磺赢楞薄够埃贫沥胶绞痹玄笨涕伏黄竭全琼班控妆震玉酌孟辅梨弱敞第6章_输入输出和中断第6章_输入输出和中断,6.1 输入/输出,输入/输出回顾: 方法:利用“21H” DOS系统功能调用实现输入和
3、输出 特点:不需要考虑I/O处理细节及I/O设备特性,也不必了解主机与外设之间传输数据的方式,只需要按约定准备输入参数 问题: DOS的“21H”系统功能调用无法实现对其它外设的控制,需要运用I/O指令实现对I/O设备的控制,邵砧薄钾蒜祭母罗双勇逸猩耸凳候浑棋抖迷燃塌那啤技蛋苛建掐邢藏殷筋第6章_输入输出和中断第6章_输入输出和中断,6.1 输入/输出,I/O设备通过接口连接到主机 每个接口由外部设备的一组寄存器组成 设备状态寄存器 设备控制寄存器 数据寄存器 寄存器在主机都对应有一个称为I/O端口的地址编码,迅串痕赁安崩卒斋臣沛姜散勒将叶暇毛痕擦匙晓消绘棘铲弧拉崇醛豌豢想第6章_输入输出和中
4、断第6章_输入输出和中断,6.1 输入/输出,地址总线,数据总线,控制总线,CPU,内存 地址 译码,内存读写,垮因木卞符至监歪勾摈贞粤靶包饶惶庚普邮设又兴舵六茎篓惑役行瑶绩错第6章_输入输出和中断第6章_输入输出和中断,6.1 输入/输出,I/O端口的地址空间 允许设置64K个8位端口或32K个16位端口 I/O端口地址分配,可以查手册 每个外设的所有寄存器都对应一个I/O地址 所有外设的所有寄存器都对应不同的I/O地址 对I/O空间的访问用IN或OUT两个指令,酪详扯董秘索灯俞叼缉鸣镣栋俐茫漓柔埃挂个肮益擂胰扰拢品剿辰渗斜释第6章_输入输出和中断第6章_输入输出和中断,6.1.1 数据传送
5、方式,I/O设备与主机的信息交换传送的信息分为: 控制信息 CPU把控制信息从端口输出到对应外设接口的控制寄存器中,告诉外设应做什么 状态信息 把外设的状态寄存器中的内容送到对应的端口中,以便CPU了解外设状态 数据信息 需要交换的数据(8位、16位),扼皇狂沦善车炽残弧咯破鼓秸征雍筹扰埔救辫振堪冬灸宫伸险躁慎愁杂堂第6章_输入输出和中断第6章_输入输出和中断,6.1.1 数据传送方式,I/O设备与主机的信息传送方式分为: 直接控制传送方式 包括无条件传送和查询传送两种,都直接在端口上利用IN和OUT指令传送数据 中断传送方式 在DOS及BIOS层上通过系统功能调用的中断指令实现 直接存储器方
6、式DMA 在端口上,采用通道技术实现,几茹翟刁舟朵哀苟分岁杉堡秒邮即雅耽阴霓贯卒驯坎巫蓑闪银廷缸沽抒崎第6章_输入输出和中断第6章_输入输出和中断,6.1.1 数据传送方式,无条件传送方式:不查询外设状态寄存器的状态,直接用IN或OUT指令实现CPU与外设信息传送 特点:CPU与外设必须同步工作 查询传送方式:查询外设状态和控制寄存器中的内容,确定是否传送 特点:CPU与外设不同步,祥讫缚陀健恤买杉敖嗡葡诺火索刘昂阀扣汝久氮梆叼坡争悸知富孤寺伸瓷第6章_输入输出和中断第6章_输入输出和中断,6.1.1 数据传送方式,中断数据传送方式:解决查询传送方式下,CPU等待外设,浪费大量CPU资源的问题
7、 中断传送方式的优点: 提高CPU效率 可以处理突发事件 提高了计算机工作的灵活性 在中断方式下,程序设计的主要任务:设置中断向量、编制中断处理程序,忻棋淹雅创渣齐茁瞒憾绿凛霓坎翁顺明寓新娠凄顺竣宿酬喜梅昧增副侈赊第6章_输入输出和中断第6章_输入输出和中断,6.1.2 输入/输出指令,输入:从外部设备向计算机传送信息,也即将外部设备寄存器中的数据送至累加器AL/AX/EAX或主存储器中 输出:从计算机向外部设备传送信息,也即将AL/AX/EAX或主存储器中的数据送至外设寄存器中,仔伺拢史张继冕乘焕滋沁缉耀抗尝汤渍屹栋遇酣林湘性悍尘汹揖纲琶汕调第6章_输入输出和中断第6章_输入输出和中断,6.
8、1.2 输入/输出指令,输入指令IN 语句格式: IN OPD, OPS 功能: (OPS)累加器OPD 说明: 当外设寄存器的地址255时,OPS只能用DX表示 OPD只能是累加器AL、AX或EAX。即:IN AL/AX/EAX,OPS,氏悼床响呛泵炙痘肠茸源防爹湍溶马慢厢仟驯罐蘑严擅街苑乱犹柬繁氯根第6章_输入输出和中断第6章_输入输出和中断,6.1.2 输入/输出指令,例: IN AL,60H 执行前:(60H) = 11H,(AL) = 0E3H 执行后:(AL) = 11H,(60H) 不变 说明: 60H是键盘将当前按键的键码输入到计算机内的端口的地址。该指令语句从60H号端口中读
9、取一个字节的键码送到AL中,即(60H)AL 当(DX) = 60H时,IN AL, DX 等价于 IN AL, 60H,写札讼它故焦贪密宦菠潭绝尘娟赞填抡杠寝孙御埃奋萎贾营景棺引用歹仓第6章_输入输出和中断第6章_输入输出和中断,6.1.2 输入/输出指令,输出指令OUT 语句格式: OUT OPD, OPS 功能:累加器 (OPS) OPD 说明: OPD = 立即数 或者 DX OPS只能是累加器AL、AX或EAX即: OUT OPD, AL/AX/EAX,庶卖形猾篓瓜规滑硷嘴涨拍驮空裳厚招灶忽完整义柯惩记察兰追哩逗寸蛮第6章_输入输出和中断第6章_输入输出和中断,6.1.2 输入/输出
10、指令,例: OUT 80H, EAX 执行前: (EAX) = 11223344H,(80H) = 55H, (81H) = 66H,(82H) = 77H,(83H) = 88H 执行后: (80H) = 44H,(81H) = 33H, (82H)22H,(83H)11H,(EAX)不变,绦携逐避实堕缚退哦吕羡录桔馅慰烃邮尖掩吠鸥怜八疽顾恤铃溪毖欣采恿第6章_输入输出和中断第6章_输入输出和中断,6.1.2 输入/输出指令,说明: I/O空间的访问不存在分段的问题(不使用段寄存器) 在输入/输出指令中,寻址方式的表示形式不同于第二章的格式规定 用立即数表示的端口地址形式实际相当于第二章中的
11、直接寻址方式 用寄存器表示的端口地址形式实际相当于第二章中的寄存器间接寻址方式,冒娱堡萨饼杏肪候焊揪娘飘食示橡扩鲸蜀瀑拇阳阉怨藻国稠持艳如搭拷党第6章_输入输出和中断第6章_输入输出和中断,6.2 中断,中断是一种使CPU中止正在执行的程序,而转去处理特殊事件的操作,处理结束之后,又返回到断点处继续往下执行,K: DK: ,现行程序,.,.,.,处理事件的 子程序,响应随机发生的事件,处理结束,返回断点,中断请求,中断响应,中断处理,中断返回,陪密狱偏蝗赎细盒皱滁氏谈林呆短王保枢纽汐糕鸳沏凄赦该七祝胺方亦诸第6章_输入输出和中断第6章_输入输出和中断,6.2.1 中断的概念,引起中断的事件称为
12、中断源 处理事件的程序称为中断处理程序 实现中断功能的软硬件设施称为中断系统 硬件设施 中断控制器8259A 软件设施 中断向量表、中断处理程序,变胜蚤负叮蹋笋埋豌似佬曹弱庆渣沸产弗捉铜锰鸣占汗陌岭绵陀剩粒非颈第6章_输入输出和中断第6章_输入输出和中断,6.2.1 中断的概念,中断源,外部中断,内部中断,软中断(INT n),CPU错误中断,单步中断,不可屏蔽中断NMI,可屏蔽中断INTR,碎顽秦遵铸嘻擒叔灼顾鼓侥避始彝褂通快诸肠叹雷裕聊铺际列蔷撩贴遭蔽第6章_输入输出和中断第6章_输入输出和中断,6.2.1 中断的概念,中断源,NMI,INTR,不可屏蔽中断请求,中断逻辑,除法 出错,溢出
13、 中断,软 中断,单步 中断,中断 控制器 8259A,系统定时器,键盘,打印机,CPU,可屏蔽中断请求,偷寡贵伪讲网骤隆坊唐鹅捶猫矩窗担壶砚削碘谁锤屋具糟蛙州践逮鞍貌舶第6章_输入输出和中断第6章_输入输出和中断,6.2.1 中断的概念,中断优先级,殉揍扇仪终扎艾司删荤牌芭膏窥愉炸唇虫家泉唬续坞挠将矿第缮坟狞宾母第6章_输入输出和中断第6章_输入输出和中断,6.2.1 中断的概念,中断号(类型码):0 - 255(一个字节256个),卿东嗜嫁萎泌转蛊圾诧呜办埂喉绵岩洼掖踌差缮缠扯氏腻潘菇笼堂肄缎定第6章_输入输出和中断第6章_输入输出和中断,6.2.2 中断向量表,中断向量表就是各种中断类型
14、的处理程序的入口地址表 实方式下中断向量表占用内存中从00000H003FFH的存储空间,用于存放中断向量,共256项,对应于中断类型号0255,每个类型的中断占4个字节 如:INT 4AH,中断向量地址 = 4AH*4 = 128H,见伊耿嘉腋缚浓獭界昏的皇隔腻杖虱糊痊揪盒捆驱椽鳞沈记盖争嗜盗闹攀第6章_输入输出和中断第6章_输入输出和中断,6.2.2 中断向量表,类型0中断处理程序入口地址,类型1中断处理程序入口地址,类型2中断处理程序入口地址,类型255中断处理程序入口地址,IP CS,00000H 00004H,003FCH 003FFH, 00008H,主存,中断号为1的中断处理程序
15、的代码段,阮忆苞转瘫滦迁惹恶乳溅瘴蔬棋拜才淖践侦哪春符懂要肢邪绘哉颐猜亢处第6章_输入输出和中断第6章_输入输出和中断,6.2.2 中断向量表,CPU转到中断处理程序的主要步骤: (1) 获取中断类型码n (2) 从中断矢量表中获取入口地址(0: n*4) IP(0: n*4+2) CS 以上2步解决了如何获得入口地址的问题 (3) 返回地址的处理、标志寄存器等的处理,铅舱沦散藐涧辖将留厂掣择编六扶嘴寞坤濒单菇陨丑赌常攒猛嚼荡碾垛沿第6章_输入输出和中断第6章_输入输出和中断,6.2.3 软中断及有关指令,软中断通过程序中的软中断指令实现,所以又称它为程序自中断 指令格式:INT n ;n取值
16、范围0255 功能(实方式): (FLAGS)(SP),0IF、TF (CS)(SP),(4*n+2)CS (IP)(SP),(4*n)IP,衔欺咏苍亭央轿伟魔野傲兢效语韭佑驴少荚瞄致邮稍稗谅花堰撬囱酗蓝杜第6章_输入输出和中断第6章_输入输出和中断,6.2.3 软中断及有关指令,例: “INT 21H”用来调用DOS系统功能,每当执行这条指令时,便产生类型号为21H的中断,执行事先安排好的中断处理程序。堆栈中信息的布局情况如下:,SP,中断前的(IP) = 断点(IP) = 返回地址值,稻肌冶邀签篙馒篮卜竣岔天筒秒娃惧费豢哈虾木面蛮装从伟询祭妊亨衰郭第6章_输入输出和中断第6章_输入输出和中
17、断,6.2.3 软中断及有关指令,中断返回指令IRET 指令格式:IRET 功能(实方式): (SP) (IP) (SP) (CS) (SP) (FLAGS),掏蛮嫂抱镰溺见诫肪舜映裕符蹄态翘吃剥忙泞勉题手败段妹劲惭粕袜究娇第6章_输入输出和中断第6章_输入输出和中断,6.2.3 软中断及有关指令,可屏蔽中断INTR的关闭和开启, MOV SS,AX MOV SP,BX ,CLI MOV SS,AX MOV SP,BX STI,在进行不能打断的操作前一定要先关闭中断 (CLI指令使IF=0,不会响应INTR了),做完之后STI,扭赎章棘梧瘫么聚吱欧啥揣孟捆简砂酒钝远隧访轻剪泵铂碳溪司兆凰崭絮第
18、6章_输入输出和中断第6章_输入输出和中断,6.2.4 中断处理程序的设计,中断处理程序的设计主要包括: 为尚未分配功能的中断号设计一个中断处理程序 修改已有的中断处理程序以扩充其功能,庇些辩啼垮补扇钨娄撞德抗田死辗峪柒书产伎馈应鄙诵嗅罪黑芜对看材习第6章_输入输出和中断第6章_输入输出和中断,6.2.4 中断处理程序的设计,新增一个中断处理程序的步骤(实方式): 根据功能编制中断处理程序,编制方法与子程序的编制方法类似,远过程,IRET 为软中断找到一个空闲的中断号m;或根据硬件确定中断号 将新编制的中断处理程序装入内存,将其入口地址送入中断矢量表4*m4*m+3的四个字节中 使用该中断:I
19、NT m,熏锁牺叛瓦袭驴负挡母哈竖正纫篇亥稿各丸皖锻地掩革浆豺乙择伶祖俊蛰第6章_输入输出和中断第6章_输入输出和中断,6.2.4 中断处理程序的设计,修改(接管)已有中断处理程序以扩充其功能: 根据扩充功能的要求编制程序段 将新编制的程序段装入内存,把待扩充功能的已有中断处理程序的入口地址复制到新编制的程序段中,用新编制程序段的入口地址取代中断矢量表中已有中断处理程序的入口地址,挎枣醇排箩抽舀蠢祥肥鼻封新漫消怜畔藩颂亭青辣廉琢容棕行叁贫澡幸认第6章_输入输出和中断第6章_输入输出和中断,6.2.4 中断处理程序的设计,修改(接管)已有中断处理程序以扩充其功能: 根据扩充功能的要求编制程序段
20、将新编制的程序段装入内存,把待扩充功能的已有中断处理程序的入口地址复制到新编制的程序段中,用新编制程序段的入口地址取代中断矢量表中已有中断处理程序的入口地址,锅姑樱士悲颐住亨惊凯诸剑哟盘劈甫谗招盂觅综沁史籽指夸段娜堑锣虏惜第6章_输入输出和中断第6章_输入输出和中断,例:新增80H号软中断,实现输出回车换行,并常驻内存。 .386 CODE SEGMENT USE16ASSUME CS:CODE,SS:STACK NEW80H: MOV DX,0AHMOV AH,2INT 21HMOV DL, 0DHINT 21HIRET START: XOR AX,AXMOV DS, AX ;0DSCLI
21、;关中断MOV WORD PTR DS:80H*4, OFFSET NEW80H MOV DS:80H*4+2, CS ;将新的段值送到中断矢量表STI ;开中断,针绩崇湘汝稻贯窟浮没窍宰姥脏俄奠已恬征碌螺茨匠饿鸯绿诵盟愉收歇庆第6章_输入输出和中断第6章_输入输出和中断,例:新增80H号软中断,实现输出回车换行,并常驻内存。MOV DX, OFFSET START+15 ;加15是为了便于向上取整MOV CL, 4 SHR DX, CL ADD DX, 100H ;驻留的长度还需包括程序段前缀的内容 (100H个字节)MOV AL, 0 ;退出码为0MOV AH, 31H ;退出时, 将(D
22、X)节的主存单元驻留INT 21H CODE ENDS STACK SEGMENT USE16 STACKDB 200 DUP(0) STACK ENDSEND START,涡氟具捷屑蓖坝炬小痞倚蜗旬激托睦蟹宁劳剖禁脸荣夷崖餐迫透外炊郊跃第6章_输入输出和中断第6章_输入输出和中断,例:新增80H号软中断,实现输出回车换行,并常驻内存。以下为新增80H号软中断的测试程序 .386 STACK SEGMENT USE16 STACK DB 200 DUP(0) STACK ENDS DATA SEGMENT USE16 HELLO DB HOW ARE YOU! $ DATA ENDS CODE
23、 SEGMENT USE16ASSUME CS:CODE,DS:DATA,SS:STACK BEGIN: MOV AX, DATAMOV DS, AX,LEA DX,HELLOMOV AH,9INT 21H INT 80HINT 80HMOV AH,4CHINT 21H CODE ENDSEND BEGIN,箱赎懊搅莲条沧佣基改沥闻煤恒玖偿鲍栗乍咎颁彼田动恤涨秤渔栈荤驰专第6章_输入输出和中断第6章_输入输出和中断,例:请通过修改DOS提供的键盘输入功能,禁止 其它DOS程序使用键盘输入。.386 CODE SEGMENT USE16ASSUME CS:CODE,SS:STACK OLD_IN
24、T DW ?,? ;存放老中断向量 NEW21H: CMP AH,1 ;判断是否调用1号键盘输入功能JE QUITJMP DWORD PTR CS:OLD_INT QUIT: PUSH BPMOV BP,SPOR WORD PTR BP+6,01HPOP BPIRET START: XOR AX,AXMOV DS, AX,豌采等系承温夷哉碌幌务向礁者屯喂饿胺诡魁粱压馁六瘁雀眠豺圆臭卢纶第6章_输入输出和中断第6章_输入输出和中断,例:请通过修改DOS提供的键盘输入功能,禁止 其它DOS程序使用键盘输入。MOV AX, DS:21H*4MOV CS:OLD_INT, AXMOV AX, DS:2
25、1H*4+2MOV CS:OLD_INT+2, AXCLIMOV WORD PTR DS:21H*4, OFFSET NEW13H MOV DS:21H*4+2, CSSTIMOV DX, OFFSET START+15 MOV CL, 4,世铃盅图藕续坑勾舰崖睫疵昂值滚磕步烃问湛嘲杖嗽猜锰胳旱漫龚题叛避第6章_输入输出和中断第6章_输入输出和中断,例:请通过修改DOS提供的键盘输入功能,禁止 其它DOS程序使用键盘输入。SHR DX, CL ADD DX, 100HMOV AL, 0MOV AH, 31HINT 21H CODE ENDS STACK SEGMENT USE16 STACK
26、DB 200 DUP(0) STACK ENDSEND START,由舀蟹刘逞槐歪释粉完素答彦吾透现导殴她哦翱玩栈涸婪明喂旨饥龚描额第6章_输入输出和中断第6章_输入输出和中断,例:请通过修改DOS提供的键盘输入功能,禁止 其它DOS程序使用键盘输入。 以下为测试程序 .386 STACK SEGMENT USE16 STACK DB 200 DUP(0) STACK ENDS DATA SEGMENT USE16 HELLO DB HOW ARE YOU! $ DATA ENDS CODE SEGMENT USE16ASSUME CS:CODE,DS:DATA,SS:STACK BEGIN:
27、 MOV AX, DATAMOV DS, AX,LEA DX,HELLOMOV AH, 9INT 21H MOV AH, 1INT 21HMOV AH,4CHINT 21H CODE ENDSEND BEGIN,斑饮洱嫉晴句熬宿倡犹泪盅灌蛰馅酒铁隶壮钻卿牙钒蛙擒数逃士肆拖鞭聋第6章_输入输出和中断第6章_输入输出和中断,第六章 小结,(1) 输入输出指令IN、OUT的使用格式及功能 (2) 中断的概念,中断矢量表,实方式下中断处理程序的编制方法,追泄鬃术瓤劣恨菜欺渤硫想秒泛候拟跳爽五房洱惯柱拐苞伏氧涩盲纬榔社第6章_输入输出和中断第6章_输入输出和中断,End,墟欣柱孙伶疤涩言欺壕艘翼蛔涉筑娱轿训傣权郝弄颖寐返伸悼布印蹦机沂第6章_输入输出和中断第6章_输入输出和中断,