虽然写这个博客主要目的是为了给我自己做一个思路记忆录,但是如果你恰好点了进来,那么先对你说一声欢迎。我并不是什么大触,只是一个菜菜的学生,如果您发现了什么错误或者您对于某些地方有更好的意见,非常欢迎您的斧正!
目录
第1节——8088中断系统的概念
●中断的概念 |
♦CPU的机制或过程 ♦CPU在正常运行程序时,由于内部/外部事件引起CPU 中断正在运行的程序,转去执行为该事件预先安排的服务程序,服务完毕后,再返回原来的程序继续执行。 ♦(通俗理解)你在写作业,你妈叫你去倒垃圾(中断写作业),你倒完垃圾回来又继续写作业(返回原来的程序)。 |
●中断的操作和应用 |
♦同步操作/并行操作 ♦实时处理 ♦故障或异常处理 |
●中断源和其分类 |
♦中断源:引起中断的时间 或 发出中断的外设 (你妈叫你倒垃圾) ♦分类 ①外部中断(你妈叫你倒垃圾) ▷可屏蔽中断(INTR引脚,一般是指interrupt的缩写,也就是中断)(你不听) ✔外设 ✔受IF控制,N=8~255 (IF标志位) ▷不可屏蔽中断(NMI引脚) (你妈超凶,你必须听) ✔电源,内存错误等 ✔不受IF控制,N=2 ②内部中断(你写着写着发现自己想要打一把游戏,然后你去了...) ▷CPU内部 ▷软件中断(指令错误) ▷异常(指令执行时发生错误) |
●内部中断(异常,Exception):8088内部执行程序错误
①DIV或IDIV指令 (符号整除法指令)
②INT指令 (向CPU发送中断的指令)
③INTO指令 (溢出中断指令)
④单步中断(陷阱标志位TF=1,每条指令执行完成引起中断,N=1)
▷为用户提供发现、调试并解决程序执行异常的途径
例如BIOS和DOS功能调用,DEBUG
◆DIV或IDIV指令
♦除数为0或商溢出 (比如2÷0是不实际的)
♦N=0
MOV BL,0 IDIV BL ;除数BL=0,产生除法错中断 |
MOV AX,200H MOV BL,1 DIV BL ;商溢出,产生中断 |
注:16 位数的除法,要求商,必须是 8 位数以内,那么, 65535 / 2 = 32767...1,这个商,就超出了 8 位数,这就是溢出。
◆溢出中断
♦若溢出标志位OF=1,则INTO指令引起中断
♦N=4
MOV AX,2000H ADD AX,7000H ;2000H+7000H=9000H,溢出:OF=1 INTO ;因为OF=1,产生溢出中断 |
◆软中断
♦INT n指令产生一个中断
♦N=n
♦例子:n=21H,DOS系统功能调用
●中断源的优先权(由高到低)
♦软件中断
①除法错中断
②指令中断
③溢出中断
♦非屏蔽中断
♦可屏蔽中断
♦单步中断
●进入中断服务程序的向导:8088中断向量表 | |
●中断向量:中断源(N)的中断服务程序的入口地址CS:IP |
|
♦段基址:CS,偏移地址:IP ♦每个向量占4字节。 | |
●中断向量表 | |
♦按相应的中断源编号N递增存放中断向量集合 ♦一般存放在内存中的0地址 | |
①含有256个中断源 | |
②中断向量表存放位置 0h~3FFh 共1K个字节 | |
③中断类型码(中断源编号) ▷内部中断:自动形成 ♦被零除 0 ♦单步中断 1 ♦NMI 2 ♦断点中断 3 ♦溢出中断 4 ♦INT N ▷外部中断:来自中断控制器 | |
④查找N号中断源的中断服务程序的入口地址(即中断向量) ▷先找到中断向量的存放地址 ♦存放地址 = 4*N ▷读取(4*N)~(4*N+3)单元 ♦读出中断向量并写入CS:IP寄存器 跳转 |
●中断系统的功能
功能:发现和识别中断源,实现为中断源提供中断服务。
❶能产生和识别中断
♦外设能发出中断请求
♦接口能屏蔽指定的中断请求
♦CPU能识别中断源
♦CPU能决定是否响应中断(响应中断的条件)
执行完现行指令
最后1个总线周期最后1个状态(T4),检测INTR引脚
开中断状态:STI指令
❷能完成中断响应(提供中断服务和返回)
♦关中断 — 保护断点 — 保护现场 — 中断服务 — 恢复现场 — 返回开中断
❸能支持优先权排队
❹能实现中断嵌套
●中断嵌套的例子
♦外设2的优先级>外设1的优先级(你在写作业的时候,你爸叫你去切菜(外设1),你刚刚走过去,你妈(外设2)叫你去倒垃圾,你爸是个妻奴,所以你妈优先权比较高,你就先去倒垃圾,再回来切菜,最后返回自己房间写作业)
♦外设1进行中断服务的时候,被外设2的事件中断
第2节——中断机制的硬件基础
●外设:能发出且保持中断申请直到其相应为止 | |
♦措施:每个中断源配置一个中断请求触发器(1bit)。 | |
●接口:能屏蔽或开放某个外设的中断请求 | |
♦中断请求触发器的Q端不再直连INTR,而受到与门控制。 ♦每个中断源配置一个中断屏蔽触发器。其Q端控制与门。 ♦增设一个控制端口,控制中断屏蔽触发器 | |
●CPU:①能识别中断源②管理中断优先级 | |
♦软件方法(查询中断) ♦硬件方法(向量中断) |
●硬件方法(向量中断)
❶将8个外设中断请求触发器组合为中断源寄存器(端口地址P0)
❷将8个中断请求信号输入或门,其输出连接INTR。
●掩码屏蔽法 | |
IN AL,[20H] TEST AL,01H JNE PWF TEST AL,02H JNE DISS TEST AL,04H JNE KEYBRD | ;输入中断源寄存器的数据 ;检查位0(电源故障)是否有中断请求 ;有,则转至电源故障处理程序 ;检查位1(磁盘)是否有中断请求 ;有,转至磁盘服务程序 ;检查位2(键盘)是否有中断请求 ;有,转至键盘服务程序 |
注意:JNE指令:当ZF = 0跳转 。(位与的结果不为0,则ZF = 0,否则ZF=1) | |
●移位检测法 | |
IN AL,[20H] RCL AL,1 JC BIT7 RCL AL,1 JC BIT6 …… RCL AL,1 JC BIT0 | ; 输入中断源寄存器的数据 ;左移1位,带进位 ;有进位跳转: 位7对应中断服务程序 ;左移1位,带进位 ;有进位跳转: 位6对应中断服务程序
;左移1位,带进位 ;有进位跳转: 位0对应中断服务程序 |
●向量中断——用硬件方法确定中断源及优先权
♦基本原理:每个外设预先指定一个中断类型码(N)。当CPU识别出外设有请求中断并予以响应时,中断控制逻辑把N送入CPU,CPU据此自动查询中断向量表获取其中预存的中断服务程序的入口地址,并转入中断服务程序。
♦特点:
响应速度快
硬件复杂
典型芯片:8259A
第3节——8259A性能和结构
●8259A基本功能 |
|
♦接收8个中断请求(可扩展64级) ♦能提供中断类型号N(中断矢量) ♦能屏蔽和开放外设的中断请求 ♦支持多种方式的优先级管理 | |
●8259A外部引脚 | |
♦面向CPU的引脚:D7~D0,CS,A0,RD,WR,INT,INTA ♦面向外设的引脚:中断请求输入IR7~IR0(优先级:IR0最高) ♦同类芯片扩展:级联控制SP/EN,CAS2~CAS0。 | |
●8259A内部结构 | |
❶数据总线缓冲器 | |
♦双向三态,与系统DB相连,传送控制字,状态,中断号等信息 | |
❷读/写逻辑 | |
♦控制片选CS,地址线A0,以及WR/RD线。执行包括写入命令(初始化和控制)或读取8259相应端口(IRR,ISR,IMR)。 | |
❸中断请求寄存器IRR | |
♦8位,寄存IR0~IR7是否有中断请求。 ♦Di位表示IRi脚有无中断请求:1有;0无 | |
❹中断服务寄存器ISR | |
♦记录IR0~IR7中断源是否被服务中… ♦Di位表示IRi是否正在进行中断服务:1是;0否 | |
❺中断屏蔽寄存器IMR | |
♦8位,记录是否对IR0~IR7的中断申请进行屏蔽(禁止) ♦Di位表示IRi中断申请是否进行屏蔽: 1是;0否 | |
❻中断控制逻辑 | |
♦产生向CPU输出的中断请求信号INT ♦按收CPU送来的中断响应信号INTA ♦控制8259向DB上送出中断类型号N。 | |
❼级联缓冲器/比较器 | |
♦SP/EN:从编程/缓冲器允许信号。 u采用缓冲方式时(输出 ) p 输出:控制数据总线缓冲器的使能; u采用非缓冲方式(输入 ) p 区分主从片:主片=1,从片=0. ♦CAS2~0:级联信号线 u主片:输出 u从片:输入 | |
❽优先权电路 | |
♦选择IRR中优先权最高的IRi,并将其和ISR中的中断源比较,若IRi优先级更高,则向CPU产生中断申请INT。 ♦优先权 IR0﹥IR1……﹥IR7;禁止同级或低级中断,向高级中断开放 ▷工作原理 ♦首先,由8个“与”门逻辑选出参加中断优先级排队的中断请求级:由8位IRR与8位IMR分别送入“与”门输入端,只有当IRR位置“1”(有中断请求)且IMR位置“0”(开放中断请求)同时成立时,相应“与”门输出才为高电平, 并送到优先级编码器的输入端参加编码。 ♦其次,优先级编码器对参加排队的中断优先级进行编码,并从中选出当前最高优先级的代代码(A2,A1,A0)。 ♦最后,把ISR中当前正服务的优先级的代码(B2,B1,B0)与新来的中断请求的优先级代码(A2,A1,A0)一起送入比较器进行比较:当比较器输出有效且有中断请求时,与门将输出有效电平向CPU提出中断请求INT。 ♦结论:当一个中断源被服务时,它会禁止同级或低级中断请求的发生,但能向高一级的中断请求开放。 | |
第4节——8259A中断响应过程
●8259A中断响应过程(单片)
❶当IR7-0有变高,中断请求寄存器IRR相应的位置1
❷若IMR相应位中断允许,则8259A通过INT向CPU送出中断请求
❸若CPU开中断,则用INTA响应2个负脉冲。
❹当8259A收INTA第1个负脉冲后,使最高优先权的ISR位置位,相应IRR位复位。优先权的顺序为: IR0﹥IR1……﹥IR7。
❺当8259A收第2个INTAA负脉冲,8259A向DB送出中断类型号N。
❻CPU读取DB上的N,自动计算中断向量(CS:IP)的保存地址(N*4),在AB上出现N*4,读取其中的中断向量(CS:IP)恢复到CS:IP中,实现进入中断服务程序。
●8259A中断响应过程(多片)
▷8259A可以级连,1个主片最多可以级连8个从片
♦级连时,主片CAS0~CAS2连至每个从片的CAS0~CAS2,输出被选中的从片ID,
♦每个从片的中断请求信号INT,连至主片8259A某个中断请求输入端IRi;主片的INT线连至CPU的中断请求输入端INTR
♦主片在第1个响应周期内通过CAS2~0送出从片ID,相应的从片在第2个响应周期内则将中断类型码N发送到数据总线上。
❶当IR7-0有变高,中断请求寄存器IRR相应的位置1
❷若IMR相应位中断允许,则8259A通过INT向CPU送出中断请求
❸若CPU开中断,则用INTA响应2个负脉冲。
❹当8259A收INTA第1个负脉冲后
♦若不是主8259A的中断源产生了的中断,则主8259A通过CAS输出从片ID,通过验证的从8259A负责(下面第5步)响应CPU。
♦使最高优先权的ISR位置位,相应IRR位复位。优先权的顺序为: IR0﹥IR1……﹥IR7。
❺当8259A收第2个INTA负脉冲,8259A向DB送出中断类型号N。
❻CPU读取DB上的N,自动计算中断向量(CS:IP)的保存地址(N*4),在AB上出现N*4,读取其中的中断向量(CS:IP)恢复到CS:IP中,实现进入中断服务程序
●8259A的端口和操作
♦2个端口
按端口地址区分命令(偶地址A0=0和奇地址A0=1)
按顺序或特征位区分命令(同一端口地址)
第4节——8259A的工作方式 |
❶引入中断请求(中断触发)的方式 |
①边沿触发方式 ♦以正跳沿请求中断,维持高电平不会继续产生中断。 |
②电平触发方式 ♦以高电平申请中断,但响应中断后须及时清除高电平 |
③注意:查询方式 ♦CPU用软件查询确定中断源。外设通过8259申请中断, 但不用INT向CPU申请中断 |
❷连接系统总线的方式 |
①非缓冲方式 ♦数据总线直接接至CPU数据总线。 ♦SP/EN用于表示主/从芯片(主片Vcc,从片接地) |
②缓冲方式 ♦数据总线通过缓冲器与CPU数据总线连接。 ♦SP/EN用于启动数据总线缓冲器,不表示主/从关系。 |
❸级联方式 |
♦不级连——只用1片,如 PC/XT |
♦级连——使用2~9片,如 PC/AT(2片) |
❹屏蔽中断源的方式 |
①通常屏蔽方式 ♦利用操作命令字OCW1,设置屏蔽寄存器IMR 例: OCW1 :1111 0011 开放IR3,IR2两个中断源。 |
②特殊屏蔽方式 ♦在某些场合,当执行某一个高优先级的中断服务程序时,若要求允许另一个优先级比它低的中断请求被响应,此时可采用特殊屏蔽方式。它可通过OCW3的D6D5=11来设定 |
❺优先级排队的方式 |
① 全嵌套方式。常用缺省方式 ♦优先级按0~7顺序排队,且只允许级别高的中断源去中断级别低的中断服务程序。 |
② 自动轮换方式 ♦中断服务结束后优先级降为最低(7),相邻的低优先级中断源自动升为最高,其余顺变。♦例:IR2中断服务结束后:每个中断源都有最高优先级的资格,故称“等优先级方式” |
③优先级指定轮换方式 |
④ 特殊循环方式 |
❻结束中断的方式 |
①自动中断结束方式 ♦在第二个INTA响应信号中,8259自动执行中断结束EOI指令,复位ISR中已置位的位。 ♦EOI:End Of Interrupt,中断结束指令 |
②非自动中断结束方式 ♦在中断服务程序返回之前,必须发中断结束EOI命令才能使ISR中的当前服务位清除。 |
第5节——8259A的编程和应用
8259的变成分为两个阶段
●初始化阶段
♦在系统加电或复位后进行
♦设定工作方式、工作条件、中断类型码或级联方式等
♦初始化命令:ICW1~ICW4
ICW1:设置中断请求触发方式及芯片数目,使8259A复位
ICW2:设置中断类型号N(的起码):8位
ICW3:设置主从片的级联方式
ICW4:设置优先级嵌套方式,中断结束方式,缓冲方式,主从片
♦只要命令字D4位为“1”,地址位A0为“0”,就是 ICW1。
♦例子:例:一片8259A,边沿触发方式;中断类型码为08H~0FH 用全嵌套、缓冲、非自动结束中断方式; 8259A的端口地址为20H和21H | |
MOV AL ,13H OUT 20H ,AL | ICW1:边沿触发,单片,设置IC4 |
MOV AL ,8 OUT 21H ,AL | ICW2:中断类型码为08~0FH |
MOV AL ,0DH OUT 21H ,AL | ICW4:全嵌套、缓冲、非自动结束中断方式 |
●操作控制阶段
♦对8259的状态、中断方式和工作过程的控制
♦操作命令:OCW1~PCW3
♦在初始后执行,可不按顺序进行
♦OCW1:中断屏蔽操作命令——设置中断源IRi的中断屏蔽/允许 |
例子:编程:屏蔽IR0,IR1,IR7三个中断源(1000 0011) |
♦OCW2:优先级方式选择/结束操作命令 |
♦OCW3:中断查询操作 |
●8529A在IBM-PC/XT中的应用
●例子:写出两片8259A的初始化程序
①初始化8259A
②初始化中断向量表
♦将用户自定义的中断服务程序入口地址放入向量表
♦例:将中断类型码N = 45 H的服务程序入口地址放入向量表
③编写中断服务程序
④使能CPU的IF
所有有疑问的人,可以推荐一个老师给你们:
搜索“慕课”,然后去主页搜索“苏曙光”,这个老师真的真的优秀!讲课从不拖泥带水,精简干练,而且条理清晰,层次分明,超级严谨的!(我不是夸张,你可以当做我是个脑残粉)他目前还没有开设“微机原理”这门课,但是他开了一门《操作原理系统》。你点进去就可以加入学习了,然后去讨论区里去问他!!!