ImageVerifierCode 换一换
格式:DOCX , 页数:31 ,大小:461.71KB ,
资源ID:8028192      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8028192.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(第六章中断8259.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

第六章中断8259.docx

1、第六章中断825980x86的中断系统一:概述1、 中断的分类1) 硬件中断有硬件引起的中断。硬件中断又分成两种:可屏蔽中断不可屏蔽的中断2) 软件中断INT N指令、异常、陷进。 2、 中断的实质实际上中断是一种引起程序运行的方式。可以这样说:什么叫中断呢? 就是停止当前程序的执行,转而执行另一个程序。3、 函数调用方式执行程序与中断执行程序有什么区别呢?函数调用:调用函数是程序的入口地址包含在指令中。中断服务程序的入口地址在中断向量表中。在获得所执行程序的入口地址的方式不一样。二:在实模式下的中断的基本术语1、 中断向量中断向量就是中断服务程序的入口地址。他包括两个方面的内容。一方面:段地

2、址 CS的内容另一方面:偏移地址 IP的内容因此:一个中断向量是由两个部分构成的,每个部分是2个字节。总共是4个字节。2、 中断向量表 在实模式下,将所有的中断向量存储在从00000H003FFH容量为1K字节的一张表中。3、 中断向量号在i386的系统中,为每一个中断从00H0FFH分配一个编号N,这个编号叫中断向量号。总共有256个中断向量号。综上所述,中断向量表的结构如下图:中断向量号地址IPCS0FF1020CSFFIFPP0FE1016CSFEIPEF.200008CS2IP2100004CS1IP1000000CS0IP04、 如何通过中断向量号找到中断服务程序的入口地址呢? 找中

3、断入口地址就是找CS和IP。我们已经知道中断向量号N。IP 4NCS 4N+25、 软中断的执行过程INT 68H 为例:1) 将FLAG状态标志寄存器入栈2) 将FLAG状态标志寄存器IF = 0,禁止CPU响应外部中断源中断。3) 将N乘以4,得到中断向量N在中断向量表中的首地址。4) 将CPU的IP入栈,将地址为(4N+1)和(4N)的内存单元中的内容存入CPU的IP。5) 将断点的CS入栈,将地址为4N+3和4N+2的内容存入到CPU的CS寄存器中。6) 执行中断服务程序。7) 中断服务程序执行IRET指令,A、 将(SP+1,SP)中的内容存入CSSP = SP+2B、 (SP+1,

4、SP)中的内容存入IP,SP=SP+2C、 (SP+1,SP)中的内容存入FLAG,SP= SP+2。 6、 中断向量表中存储着中断服务程序入口地址。那么如何初始化中断向量表呢?1) 直接初始化假设中断类型号为N、中断服务程序的名字叫INTNPROCMOV AX,N -1SHL AX,2MOV SI,AX MOV AX,OFFSET INTNPROC-2MOV SI,AX -3MOV AX,SEG INTNPROC -4MOV SI+2,AX -51、 将N乘积4,结果存入SI。2、 得到INTNPROC的偏移地址,也就是IP3、 将第二步得到的偏移地址存入到中断向量表4、 得到INTNPRO

5、C的段地址,也就是CS5、 将第四步得到的CS存入到中断向量表2) 调用DOS系统功能入口参数:段地址存入 DS 偏移地址存入 DX 中断类型号N AL功能号: AH = 25H假设中断类型号为N、中断服务程序的名字叫INTNPROCMOV AX,SEG INTNPROCMOV DS,AXLEA AX,INTNPROCMOV DX,AXMOV AH,25HMOV AL,NINT 21H7、 如何读中断向量表中的内容执行如下指令:MOV AL,NMOV AH,35HINT 21H指令执行完成后:CS: ESIP: BX8、 一个软中断的例子假设我们自己实现一个INT N指令。假设 N = 0EE

6、H,实现后,当执行INT 0EFH 指令,要求显示“SHUAIGE LIANGMEI GOOD MORNING !”INT 0EEH代码如下:DATA SEGMENT DISBUF DB SHUAI GE LIANGMEI GOOD MORNING!,0AH,0DH,$DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AH,35H MOV AL,0EEH INT 21H PUSH ES PUSH BX MOV AX,SEG INTEEP MOV DS,AX MOV AX,OFFSET INTEEP MOV DX,AX MOV AH,2

7、5H MOV AL,0EEH INT 21H INT 0EEH INT 0EEH INT 0EEH POP DX POP DS MOV AH,25H MOV AL,0EEH INT 21H MOV AX,4C00H INT 21HINTEEP PROC PUSH DS PUSH DX PUSH AX MOV AX,DATA MOV DS,AX LEA AX,DISBUF MOV DX,AX MOV AH,09H INT 21H POP AX POP DX POP DS IRETINTEEP ENDPCODE ENDSEND START9、 硬件中断的过程1) 外部中断源向8259提出中断请求2

8、) 如果8259允许中断,8259就会通过8259的引脚INT 向CPU提出中断请求。3) 如果CPU允许中断(FLAG.IF=1)CPU就会向8259发出两个INTA周期,在第二个INTA周期内,CPU会从8259的ICW2寄存器中取出中断类型号N。4) 将CPU的FLAG状态标志寄存器入栈。同时将FLAG的IF清05) 将断点的IP入栈,将(4N+1,4N)中的内容存入到CPU的IP寄存器中。6) 将断点的CS入栈,将(4N+3,4N+2)的内容存入到CPU的CS中。7) 转入到中断服务程序执行。8) 中断服务程序执行IRETA、 将(SP+1,SP)中的内容存入CSSP = SP+2B、

9、 (SP+1,SP)中的内容存入IP,SP=SP+2C、 (SP+1,SP)中的内容存入FLAG,SP= SP+2。中断返回。三:保护模式下的中断响应过程1、 基本概念1) 中断向量中断描述符: 32位偏移地址、段选择子、属性2) 中断向量号000FFH3) 中断描述符 32位偏移地址、段选择子、属性4) 中断描述表2、 软件中断响应过程1) 将中断类型号N乘以8,加上IDRT的高32位。定位中断描述符在IDT中的位置。2) 在IDT中找到中断描述表中的中断描述符。3) 通过中断描述符得到中断服务程序的偏移地址。4) 通过中断描述符中的段选择子,找到中断服务程序的段描述符。5) 将第4步中找到

10、的段描述符的段基址加上第3步中的到的中断服务程序的偏移地址相加。就得到了中断服务程序的入口地址。6) CUP进行任务切换3、 在保护模式下硬件中断的执行过程首先必须通过8259得到中断类型号:从8259中得到中断类型号后,找到中断服务程序入口地址的过程与软中断相同。6.3中断控制器8259一:概述 1、8259是一个28管脚、双列直插式芯片。 2、每片8259可以接8个硬件中断源 3、8259可以工作于单片方式或级联方式。单片方式:系统中只有一片8259。此时,系统中最多有8个硬件中断源。级联方式:一片8259作为主片8259。主片8259的8个中断请求信号,可以接从片8259,也可接硬件中断

11、源。 4、8259有两种中断触发方式 什么叫中断触发方式: 就是指中断请求信号有效的方式。 8259有两种中断触发方式:一种是电平触发方式;另一种是边沿触发方式。 5、8259有两种中断嵌套方式 一种是普通的中断嵌套 另一种特殊的中断嵌套 6、8259有两种中断屏蔽方式 一种是普通的中断屏蔽方式 一种是特殊的中断屏蔽方式 7、8259有两种中断结束方式 一种是自动的中断结束方式 一种是非自动的中断结束方式,其中非自动的中断结束方式又分为:指定和和不指定的两种。二:8259的内部结构和外部引脚8259的内部结构及外部引脚如图:1、 总线缓存器链接数据总线,双向、8个引脚。D0D72、 读写控制逻

12、辑RD 读信号当CPU执行 IN指令时有效。比如在PC机种8259的地址为20H,21H。IN AL,20H执行该指令时RD = 0; WR 写信号 当CPU执行OUT指令时有效。 比如: OUT 20H,AL CS:片选信号 由3个部分构成: 高位地址译码 M/IO A0或BHE A0 8259的片内寻址引脚 8259只有一根地址线,这也就意味着8259只有2个地址。如果一个地址对应一个寄存器。这也就意味着8259只能有2个寄存器。 必须注意:8259内部可访问的寄存器是很多的。8259内部有哪些可访问的寄存器呢? 4个命令寄存器: ICW1 ICW2 ICW3 ICW4 3个操作命令字 O

13、CW1 OCW2 OCW3 一个IRR中断请求寄存器 一个ISR中断服务寄存器 一个中断查询寄存器 也就是说8259内部有10可以通过程序访问的寄存器,但是8259只有2个地址。 A = 0对应哪些寄存器呢? ICW1 只写 OCW2 只写 OCW3 只写 IRR 只读 ISR 只读 查询字由于ICW1、0CW2、0CW是只写,而且他们的地址都为A0=1,这三个寄存器如何区别呢?执行OUT 20H,AL肯定是写到ICW1、0CW2、0CW中去了。ICW1、0CW2、0CW3通过标志位来区分的。也就是我们初始化的数据中有两个为作为标志位。 D4 D3 对应的寄存器 1 * ICW1 0 0 OC

14、W2 0 1 OCW3如果是读:只能从IRR或ISR中读。也就是执行: IN AL,20H只能从IRR或ISR中读。那么怎么区分到底是从哪里读的呢?实际上,8259在读这两个寄存器之前会通过OCW3发一个读命令。OCW3的低两位是表示读IRR还是读ISR的。 OCW3 D1 D0 0 * 不读 1 0 读IRR 1 1 读ISR 也就是读IRR应该这样读: MOV AL,00001010B OUT 20H,AL IN AL,20H 也就是读ISR应该这样读: MOV AL,00001011B OUT 20H,AL IN AL,20H 如何读查询字? 通过OCW3发一个读查询字命令: OCW3

15、D2 0 不读查询字1 读查询字 MOV AL,00001100B OUT 20H,AL IN AL,20H A=1对应哪些寄存器呢? ICW2 只写 ICW3 只写 ICW4 只写 OCW1 可读可写如何区分到底是写的这四个寄存器中的哪个寄存器呢?8259的初始化必须先初始化ICW1。当初始化ICW2后,必须初始化ICW2,接下来根据需要初始化ICW3和ICW4。 最后,当8259初始化完成后所有对A0=1的读写操作都是读写的OCW1。3、 中断请求寄存器IRRD7D6D5D4D3D2D1D0IR7IR6IR5IR4IR3IR2IR1IR0功能:当8259接收到硬件中断源提出中断请求,就会将

16、8259的IRR寄存器的相应位置“1”。必须注意:IRR在什么时候变成“0”? 当CPU响应中断时,会向8259发出两个INTA周期,第一个INTA周期内,就会将IRR的相应位清“0”。4、 中断服务寄存器ISRD7D6D5D4D3D2D1D0IR7IR6IR5IR4IR3IR2IR1IR0功能:表示CPU正在运行的中断。IRi = 1 表示该中断源的中断服务程序正在执行中。IRi = 0 表示该中断源的中断响应已经结束。比如ISR中的数据:00010010 表示IR1 和IR4中断服务程序正在执行。注意:严格的讲,ISR表示的8259处理中断的过程已经结束。我们所谓的中断结束方式,实际上就是

17、指的8259ISR的相应位清“0”的方式。当然,ISR什么时候置“1”?ISR什么时候清“0”呢?当CPU响应中断时,会发出两个INTA周期,在第1个INTA周期时将ISR的相应位置“1”。ISR的相应位清“0”,分如下两种种情况。第一种情况,如果8259工作于自动的中断结束方式(AEOI),在CPU向8259发出的第二个INTA周期内将8259的ISR的相应位清“0”。第二种情况是,8259工作于非自动中断结束方式,必须在中断服务程序中,由OCW2发一个中断结束命令,将ISR中的相应位清“0”。5、 中断屏蔽寄存器IMR(OCW1)IMR就是OCW1。D7D6D5D4D3D2D1D0IR7I

18、R6IR5IR4IR3IR2IR1IR0IRi=1表示该中断源被屏蔽。IRi=0 表示允许该中断源向CPU提出中断请求。6、 中断有限权电路中断优先权电路如下图:从图可以看出,1)如果外部中断源提出中断请求,则IRR寄存器的相应位就会置“1”。2)从IRR的输入的请求信号会与IMR的输出的值的“非”后进行“与”的操作。如果IMR的相应位为“1”,与相应中断源对应的与门将输入“0”,因此该位所指示的中断源会被屏蔽。否则,来自IRR的信号,与IMR的输出值“非“后相“与”,后的值将分为两路。一路输入到中断优先编码器,另一路输入到或门。3)来自与第二步的信号中,只要其中一个中断请求信号没有被中断屏蔽

19、寄存器屏蔽,或门的信号将有效,为“1“,该信号将作为第五步与门的一个输入信号。4)中断优先编码器将会对将第二步的8个信号进行优先编码。优先编码器的工作原理是:只有8个输入信号中有一个为“1“将对输入信号进行编码。比如当IR0 = 0,IR1=1,IR2IR7为“0“,并且没有被屏蔽,则编码后:A2A1A0=001B比如当IR0IR6都为0,而IR7=1时,并且没有被屏蔽,经过优先编码器编码后:A2A1A0=111B当有多个中断请求有效,并且没有被屏蔽是,则根据优先级别,将最高优先级的中断源的编码输出。例如:IR2、IR3、IR5同时有效并且没有被屏蔽。则在固定优先权的情况下,IR2的优先级最高

20、。所以编码后的输出为:A2A1A0=010B5) 比较器输出比较器的两个输入一个来自于对中断请求信号进行优先编码的优先编码器。另一个来自于对中断服务寄存器(ISR)进行优先编码后的值。对中断服务寄存器(ISR)的优先编码与第四步相似。在固定优先权的情况下,将这两个编码进行比较,比如ISR的编码为:B2B1B0=100B这表明了正在执行的中断服务程序为IR4中断源的服务程序。而:A2A1A0=001B这表明了IR1提出中断请求。比较器的输入值AB,而输出有效的条件为:AB,而输出有效的条件为:AB。因此满足条件,所以比较器的输出无有效,即为低电平。6)来自于第三步和第五步的输出经过与门后,得到8

21、259的INT信号,输出到8259的INT引脚。8259的INT引脚连接到CPU的INTR引脚,向CPU提出中断请求。8259的中断优先方式有两种:固定优先权 IR0最高 IR7最低优先权轮换 当前执行完的中断源的优先级最低。比如:当前IR3执行完成。则IR3的优先级别最低。那么谁最高呢?IR3最低,那么IR4就是最高。因此优先权就会变成如下:低 高IR3 IR2 IR1 IR0 IR7 IR6 IR5 IR4译码器B 24译码器,38译码器7、 控制逻辑引脚:INT 中断请求信号 输出INTA 中断响应信号 输入 寄存器组: 命令寄存器:ICW1、ICW2I、CW3I、CW4 工作命令寄存器

22、:OCW1、OCW2、OCW38、 级联缓存比较器引脚:CAS0、CAS1、CAS2CAS0、CAS1、CAS2只在8259工作于级联方式时有效。主片是输出,从片是输入。如图从片8259A(比如从片1)的IR1提出中断请求,该请求通过从片1的INT引脚连接到主片8259A的IR2。主片8259再通过其INT引脚连接到CPU的INTR引脚,向CPU提出中断请求。我们知道CPU会执行两个INTA周期,其中在第二个INTA周期会从8259中的ICW2中取出一个中断类型号到CPU中。那么,在级联的方式下主片8259和从片8259都有ICW2,CPU到底是从主片8259的ICW2中取中断类型号,还是从从

23、片8259中取中断类型号呢?我们可以看到,实际上主片8259的IR2连接的并非是中断源,而是从片8259。所以实际上当主片8259的IRi(i=07)连接的是从片时,CPU响应中断时应该从从片的ICW2中取出中断类型号。当然,这又会引出另一个问题,因为主片8259最多可以连接8个从片8259。那么CPU怎么知道从哪片8259中取出中断类型号呢?8259中有一个ICW3,只有在主从结构时才会用到。主片中ICW3的某个位被初始化成1的话,就表示相应的IRi引脚,接的是从片8259。如果初始化成“0”,表示接的是中断源。比如下面3片8259按如下方式级联时,即主片的IR2和IR5连接的是从片。那么主

24、片的ICW3的值如下:主片ICW3 :00100100而从片8259的ICW3只有低3位有效,表示的是该从片8259是接到主片的哪个IRi上的。比如:第一片8259 ICW3:00000010第二片8259 ICW3:00000101下面是8259级联方式响应中断的过程示意如图:以从片1的IR1提出中断请求为例,我们看看中断响应的过程。1)CPU向所有的8259发出第一个INTA周期。2)主片接受到第一个INTA周后将当第一个INTA周期后,首先查看自己的ICW3发觉提出中断请求的IR2所对应的ICW3的相应位为“1”。则表示该引脚接的是从片8259。主片8259将会把我们前面所讲的优先权电路

25、的优先编码器的输出A2、A1、A0的值输出到CAS2、CAS1、CAS0(实际上这也是中断类型号的第三位)。在如图所示的情况下主片8259将输出:CAS2CAS1CAS0=010即表示是由接到主片的IR2上的那片从片8259的中断源提出的中断请求。3)由于所有8259,包括主片和所有从片的CAS2、CAS1、CAS0都是互联的。因此。所有的从片8259都会接收到来自于主片的通过CAS2、CAS1、CAS0的信号。4)从片8259接收到来自于主片的CAS2、CAS1、CAS0信号后,会将这个值与自己的ICW3的值进行比较。从片1比较的结果是,主片8259发送过来的值与自己的ICW3中存储的从片I

26、D号相等。因此在第二个INTA周期来到时将会把自己的ICW2中的值作为“中断类型号N”输出,CPU将读取这个值作为中断响应时的中断类型号。从片2比较的结果是,主片8259发送过来的值与自己的ICW3中存储的从片ID号不相等,因此,在第二个INTA周期来到时从片2什么都不做。引脚SP/EN到现在有一个问题我们任然没有提及,那就是8259怎么知道自己是主片8259还是从片8259呢?这分成两种情况:情况1:如果8259工作于非缓冲方式此时由引脚SP/EN来决定8259是主片还是从片。SP/EN=1该8259是主片。SP/EN=0该8259是从片。也就是我们在设计电路时,如果我们决定8259不用缓冲

27、方式。那么,就应该将主片的8259的SP/EN引脚与电源连接在一起,而将从片8259的SP/EN引脚与地(GND)连接在一起。在这儿我们要解释一下什么是缓冲方式。缓冲方式就是8259的数据线D0D7连接到数据总线时要经过8286这样的双向数据收发器的缓冲,然后才能连接到数据总线。如下图:如果8259工作于缓冲方式SP/EN作为数据缓冲信号使用。接8286双向数据收发器的OE上。三:8259的命令寄存器组1、 ICW1D0 =1 需要初始化ICW4D0=0 不需要初始化ICW4D1 = 1 8259工作于单片方式。意味着整个系统中只有一片8259。系统最多有8个硬件中断源。D1 = 0 8259

28、工作于级联方式。意味着需要初始化ICW3。D3 = 1 中断请求寄存器是电平触发方式。也就是说:中断请求信号IRi为高点平时将使得IRR中相应位置1。D3=0中断请求寄存器是边沿触发方式。也就是说:中断请求信号IRi为正脉冲信号时将使得IRR中相应位置1。D4 = 1 必须为1,ICW1标志位。2、 ICW2功能:给CPU提供相应的硬件中断源的中断类型号N。必须注意的是ICW2只能初始化高5位。第三位可变的。;也就是说第三位是随中断请求信号变化而变化。比如,当前是由IR2提出的请求并且被相应,那么ICW2第三位就是“010”。如果是IR5提出中断请求,并且被响应,那么ICW2第三位就是“101

29、”。举例:在PC_XT机中,硬件中断是由两片8259构成的。主片8259中断类型号从08H0FH;从片8259的中断类型号从10H17H。如图:主片8259的地址为20H21H,从片8259的地址30H31H。初始化ICW2.主片:MOV AL,08HOUT 21H,AL从片: MOV AL,10H OUT 31H,AL3、 ICW3ICW3只有8259工作于级联方式时才需要初始化。也就是ICW2.D1=0。主片8259的ICW3.Di=1表示中断请求信号引脚IRi接的是一个从片8259。主片8259的ICW3.Di=0表示中断请求信号引脚IRi接的是一个中断源从片8259。从片8259ICW3中存储的是从片8259的ID号。表示该从片8259是连接到主片8259的那个IRi上的。从片8259的ID号就是这个“i”的值。比如从片8259接到主片8259的IR2上,那么从片的ID号就是“2”。因为只有一个主片,而一个主片最多可以接8个从片,所以ID号从“07”。也就意味着:系统中只能有64个硬件中断源。举例:如下图,有三片

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1