第九章 中断当 CPU用查询的方式与外设交换信息时,
CPU就要浪费很多时间去等待外设。这样就引出一个快速的 CPU与慢速的外设之间数据传送的矛盾,这也是计算机在发展过程中遇到的严重问题之一。为解决这个问题,一方面要提高外设的工作速度,
另一方面发展了中断慨念。中断系统是计算机的重要指标之一。
9,1 中断原理
9,1,1 从无条件传送、条件传送到中断传送条件传送最大的缺点就是为了 CPU和外设在时间上配合正确,CPU花大量的时间用无条件方式对状态线进行查询,从而降低了整个系统的工作效率。
具有中断功能的 CPU中,有一个硬件部件专门用于检测外设的状态线。
检测状态信号状态信号有效?
外设处理外设处理检测状态信号主程序
9,1 中断原理
9,1,2 中断概念处理文档电话铃响暂停文档文档中作暂停记号电话交谈找出暂停记号位置继续处理文档执行主程序 ( 日常事务程序 )
中断申请信号有效 ( 中断请求 )
暂停执行主程序响应中断当前 PC 及寄存器入栈 ( 保护现场 )
处理外设要求 ( 中断服务 )
寄存器及 PC 出栈 ( 恢复现场及中断返回 )
继续执行主程序
9,1 中断原理
9,1,2 中断概念可见在中断传送方式下,外设应有请求 CPU
服务的权利,当外部设备准备好向 CPU传送数据,或者外设已准备就绪接收 CPU的数据,
或者有某些紧急情况要求处理,或者是定时时间到等等。这时,外设向 CPU发出中断请求,CPU接收到请求并在一定条件下,暂时停止执行原来的程序而转去中断处理,处理好中断服务再返回来执行原来程序,这就是一个中断概念。
9,1 中断原理
9,1,3 中断应用一、实时故障处理存储器出错检测电路存储器奇偶检测电路奇偶位中断请求信号
9,1 中断原理
9,1,3 中断应用二、分时操作,同时处理有了中断功能,CPU可命令多个外设同时工作。
虽然 CPU在不同的时间点上为不同的任务工作,
但宏观上看 CPU几乎同时为不同的任务工作,极大地发挥了 CPU高速性的特点。
处理任务 1
处理任务 2
处理任务 3
9,2 中断系统组成及其功能
9,2,1 三个与中断有关的触发器一、中断请求触发器
应该有两个特点:
1、它的输出可以作为中断请求信号,在满足一定条件的情况下把信号发送给 CPU,并在 CPU未响应时一直保存下去;
2、当 CPU满足一定条件下响应了该中断请求信号,执行了相关的操作后,该中断请求信号可以被撤除。
9,2 中断系统组成及其功能
9,2,1 三个与中断有关的触发器
D Q
R D
状态线中断请求外设读、写操作
CLK
+5V
8255A工作在方式 1—— 输入
A口的选通信号,当其有效时,
外设把数据打入 A口的输入缓冲器
A口的输入缓冲器,满,信号,
当其有效时表示 A口的输入缓冲器已暂存一个有效数据。
A口的中断请求信号。当其有效时,8255A的 A口向 CPU申请中断,要求 CPU从 A口取数中断允许信号。
9,2 中断系统组成及其功能
9,2,1 三个与中断有关的触发器二、中断屏蔽触发器
中断屏蔽触发器的功能就是决定中断请求触发器的输出信号是否可以作为中断请求信号发送给
CPU,这样 CPU通过对中断屏蔽触发器的设置就可以达到对中断源的控制。
中断屏蔽触 发 器
8255A工作在方式 1—— 输入
A口的选通信号,当其有效时,
外设把数据打入 A口的输入缓冲器
A口的输入缓冲器,满,信号,
当其有效时表示 A口的输入缓冲器已暂存一个有效数据。
A口的中断请求信号。当其有效时,8255A的 A口向 CPU申请中断,要求 CPU从 A口取数中断允许信号。
MOV AL,00001001 ;允许发中断
MOV 控制口,AL
MOV AL,00001000 ;屏蔽中断
MOV 控制口,AL
9,2 中断系统组成及其功能
9,2,1 三个与中断有关的触发器
CPU内部的中断允许触发器 IF
CPU通过对它进行设置来决定是否对发给它的中断请求信号进行响应。
有些 CPU,比如 8086CPU,设置了两种中断类型,可屏蔽中断和不可屏蔽中断 。可屏蔽中断受中断允许触发器控制,
只有当 IF为 1时,CPU才能响应中断请求信号。而不可屏蔽中断不受中断允许触发器的控制,只要中断请求信号有效,
不管 IF是否为 1,CPU就必须响应。因此不可屏蔽中断的中断优先级要大于可屏蔽中断的中断优先级。
IF?0 关中断 CLI
IF?1 开中断 STI
9,2 中断系统组成及其功能
9,2,2 再谈中断条件外设的中断请求信号要想发给 CPU并能最终得到 CPU的响应,必须要满足如下两个条件:
一个是中断屏蔽触发器处于非屏蔽状态。在这种情况下,中断请求信号才能发给 CPU。
但 CPU是否相应这个中断,还要看中断允许触发器是否处于开中断状态。只有 CPU是开中断的条件下,CPU才能进入中断响应过程,
处理中断事务。这就是第二个条件。
中断响应中断屏蔽 FF
中断允许 FF
CPU内的中断逻辑中断申请信号
INTR
9,2 中断系统组成及其功能
9,2,3 中断响应过程中断过程主要包括三个方面
外设发中断请求信号给 CPU即中断请求
CPU对中断请求信号所作出的反应即中断响应
CPU执行对外设操作的子程序即中断处理。
9,2 中断系统组成及其功能
9,2,3 中断响应过程一、中断申请
当中断屏蔽触发器状态为 1,则中断请求触发器输出的中断请求信号发给 CPU。
二、中断响应
CPU响应可屏蔽中断申请必须满足的 3个条件,
① 无总线请求;
② CPU被允许中断;
③ CPU执行完现行指令,
9,2 中断系统组成及其功能
9,2,3 中断响应过程三、中断处理
CPU响应中断后要自动完成三项任务
1,关闭中断;
2,CS,IP以及 FR的内容推入堆栈;
3、中断服务程序段地址送 CS中,偏移地址送 IP中。
一旦 CPU响应中断,就可转入中断服务程序之中。中断服务程序的结构如下:
push ax ; 1,保护现场
……
push bx
sti ; 2,开中断
…… ; 3,中断处理
cli ; 4,关中断
pop bx ; 5,恢复现场
……
pop ax
sti ; 6,开中断和 中断返回
reti
9,3 中断源识别及中断优先权在中断系统中一个非常关键的问题是
CPU如何知道是哪一个中断源发出的中断申请信号 。 只有正确地确定中断源,CPU
才能转到相应的中断服务程序为之服务 。
这里,确定中断源的方法被称为中断源识别或中断方式 。
!!!
9,3 中断源识别及中断优先权
9,3,1 中断源识别包括两个方面:
1,确定中断源,
2,找到该中断服务程序的首地址 。
下面我们给出解决问题的两种方案 。
9,3 中断源识别及中断优先权
9,3,1 中断源识别一、查询中断
IN AL,IPORT ;从输入接口取中断信息
TEST AL,80H ;是 0号设备请求吗?
JNZ SEVO ;是,转 0号设备服务程序
TEST AL,40H ;否,是 1号设备请求吗?
JNZ SEVl ;是,转 1号设备服务程序
TEST AL,20H ;否,是 2号设备请求吗?
JNZ SEV2 ;是,转 2号设备服务程序
TEST AL,10H ;否,是 3号设备请求吗?
JNZ SEV3 ;是,转 3号设备服务程序条件传送=查询中断?
特点:简单响应慢
9,3 中断源识别及中断优先权
9,3,1 中断源识别二、矢量中断中断申请信号 INTR
和中断响应信号 INTA是一对握手信号 。 在驱动一个中断事件过程中,
中断请求信号是外设发给 CPU的,当其有效时,
表示外设请求 CPU为之服务 。 而中断响应信号是
CPU发给外设的,当其有效时,表明 CPU可以为这个外设服务,同时要求外设提供中断类型号 。
9,3 中断源识别及中断优先权
9,3,1 中断源识别二、矢量中断
7
4
L
S
2
4
5
D Q
CLK
R D
A7
A6
A5
A4
A3
A2
A1
A0
+5V
中断申请接C P U 的D
7
~D
0
INTA
INTR
CS
T
9,3 中断源识别及中断优先权
9,3,2 中断优先权一、软件方案软件查询确定优先权的缺点是,响应中断慢
9,3 中断源识别及中断优先权
9,3,2 中断优先权二、硬件方案
1、链形电路这种方法是利用外设在系统中的物理位置来决定其中断优先权的中断申请 中断申请 中断申请中断允许入
IEI= 1,
允许发中断中断允许出 IEO= IEI INTR
0
0
1
9,3 中断源识别及中断优先权
9,3,2 中断优先权二、硬件方案
2、编码电路
74LSl48是一个 8到 3线的优先权编码器,它是一个 16个管脚双列直插式 TTL器件.
I0
I1
I7
000
I0
I1
I7
000
7
4
L
S
2
4
5
D Q
CLK
R D
A7
A6
A5
A4
A3
A2
A1
A0
T
CS
B7
B6
B5
B4
B3
B2
B1
B0
+5V
接C P U 的D
7
~D
0
INTA
INTR
7
4
L
S
1
4
8
I 7
I 6
I 5
I 4
I 3
I 2
I 1
I 0
A 2
A 1
A 0
INT 7
INT 6
INT 5
INT 4
INT 3
INT 2
INT 1
INT 0
9,4 8086中断系统
8086中断系统有两大类型的中断源,一类是由外部设备产生的中断,我们称之为 硬件中断,
硬件中断有时又称 外中断 。另一类是由指令在某种运行结果时产生的中断,我们称之为 软件中断 。另外对于硬件中断,又分为 不可屏蔽中断和可屏蔽中断,硬件中断是通过 CPU芯片的
INTR管脚或 NMI管脚从外部引入的。
中断类型号和中断服务子程序的入口地址之间的关系:
中断类型号n
×4
0000:4n+0
0000:4n+1
0000:4n+2
0000:4n+3
00
10
00
20
1000
2000
IP
CS
内存
9,4 8086中断系统
9,4,1 不可屏蔽中断所谓不可屏蔽中断就是用户不能通过
CPU内的中断允许触发器 IF控制的中断,
由 8086CPU的 NMI管脚引入 。 NMI中断请求采用上升沿触发方式,这种中断一旦产生,在 CPU内部直接生成中断类型号 02。
0000:4*2+0
0000:4*2+1
0000:4*2+2
0000:4*2+3
00
10
00
20
1000
2000
IP
CS
内存I F =0
IP,CS,FR进 栈
IP=[2*4+0]
CS=[2*4+2]
如何处理多个 NMI中断源?
9,4 8086中断系统
9,4,2 可屏蔽中断可屏蔽中断就是用户可以控制的中断,其途径是通过对 CPU内的中断允许触发器 IF的设置来禁止和允许 CPU响应中断 。 可屏蔽中断由
8086CPU的 INTR管脚引入 。 这种中断请求需要设备提供中断类型号,CPU响应中断后,取中断类型号的 4倍作为中断服务入口地址表的地址,通过查表得到相应的中断服务程序首地址,
转去执行相应的中断服务程序 。
0000:4*n+0
0000:4*n+1
0000:4*n+2
0000:4*n+3
00
10
00
20
1000
2000
内存I F =0
IP,CS,FR进栈
IP=[2*n+0]
CS=[2*n+2]
取中断类型号n
9,4 8086中断系统
9,4,3 软件中断软件中断是由 8086指令系统中的某些指令产生,或由这些指令运行后某种特定的结果产生。
9,4 8086中断系统
9,4,3 软件中断一、除法中断当进行除法运算时,若除数为 0或除数太小,使得商数大于相应寄存器所能表示的最大值,被称作除法出错。这时除法指令就相当于一个中断源,它向 CPU发出类型 0中断。
9,4 8086中断系统
9,4,3 软件中断二、溢出中断当算术运算产生溢出时,将在 INTO指令控制下向 CPU发出类型 4的中断,即溢出中断。
比如
mov al,40h
add al,40h
into
9,4 8086中断系统
9,4,3 软件中断三、单步中断和断点中断
(1)单步中断当 8086CPU的标志寄存器中的 TF标志为 1时,8086CPU
处于单步工作方式,这时 CPU在每条指令执行后自动产生类型 l的中断。
TF在标志寄存器的第 8位。
(2)断点中断
INT3指令是 1字节指令 (0CCH),
如何实现断点调试?
9,4 8086中断系统
9,4,3 软件中断四、软中断软中断是由中断指令引起的 。 中断指令的指令格式为 INT n (CD 21),操作数 n就是中断类型号 。 当 CPU执行完毕中断指令 INT
n后,就会立即产生一个中断类型号为 n的中断 。
int n?call far [4*n]
9.4 8086中断系统
9.4,4 中断概念的再讨论一、中断与调子程序之间的关系
1、中断过程实际上是 CPU从执行当前主程序转到执行为外设服务的子程序,因此从这个角度来看,是 中断过程一个调用子程序的过程。
2、但中断过程与子程序调用还是有很大差别的,首先调用子程序的过程是一个无条件过程,但中断过程的中断服务程序的调用一般是有条件的。其次子程序调用在整个程序执行中的位置是固定的。但对于硬件中断过程,只要条件满足,在整个程序执行的任意一时间点都有可能发生从主程序向中断服务子程序的转移事件,也就是说硬件中断产生的调用过程是随机的,不可预测的。
9.4 8086中断系统
9.4,4 中断概念的再讨论二、外部中断和 INT n 之间的关系结合中断指令 INT n,我们可以这样理解外部中断:当外部中断源发中断给 CPU时,如果 CPU满足一定的条件,处于开中断状态,CPU就可以响应中断,
这时外设在 CPU正在执行指令与其下一个指令之间,
等效,插入,了一个 INT n指令,这里的 n就是外设提供的中断类型号 。 注意这里用,等效,两字表示实际过程中是不存在插入 INT n指令的操作,但 CPU
确实完成了类似 INT n指令的功能,实现了主程序向中断程序的转移 。
……
MOV AL,10
MOV BX,100
……
MOV BL,100
ADD AL,BL
……
INT n
INT n
9.5 8086CPU的中断管理
9.5.1 8086CPU的中断处理顺序
8086CPU的中断优先权排列从高到低为:
1,除法出错中断,溢出中断,INT n;
2,NMl;
3,INTR;
4,单步中断 。
9.5 8086CPU的中断管理
9.5.2 8086CPU的中断服务入口地址表
9.5 8086CPU的中断管理
9.5,3 中断入口地址设置一,用串指令
CLI ;关中断
MOV AX,0
MOV ES,AX ;置附件段基地址为 0
MOV DI,n*4 ;置附件段偏移地址到 DI
MOV AX,OFFSET INT_VCE ;置中断程序首地址的偏移量到 AX
CLD
STOSW ;填偏移量到中断地址表
MOV AX,SEG INT_VCE ;置中断程序的段基地址到 AX
STOSW ;填段基地址到中断地址表
STI ;开中断
……
9.5 8086CPU的中断管理
9.5,3 中断入口地址设置二、用伪指令
INT- TBLSEGMENT AT 0 ;定义 INT- TBL段,段基地址为 0
ORG n*4 ;指定偏移地址
DD INT— VCE ;存中断程序入口地址
INT- TBL ENDS
…… ;其他处理
MCODE SEGMENT ;主程序
…… ;其他处理
INT— VCE PROC FAR ;中断服务程序
……
IRET
INT— VCE ENDP
……
8.5 8086CPU的中断管理
8.5,3 中断入口地址设置三、用系统调用使用 25H功能时要求:
AL=中断类型号
DS,DX=中断服务程序首地址的段,偏移地址注意 DS保护
PUSH DS
MOV DX,SEG INT60H ;段基地址送 DS
MOV DS,DX
MOV DX,OFFSET INT60H ;偏移地址送 DX
MOV AL,60H ;中断类型号送 AL
MOV AH,25H
INT 21H ; 25H功能调用
POP DS
8.5 8086CPU的中断管理
8.5,3 中断入口地址设置四、直接装入法若外设的中断类型号为 6BH,则此中断类型号对应的中断矢量表地址为从 00lACH开始的四个存储单元.设中断服务程序段地址是
1000H,偏移地址为 2000H。
MOV AX,,0
MOV DS,AX ;置数据段段基地址为 0
MOV AX,2000H
MOV [01ACH],AX ;对偏移地址为 01AC的单元
MOV AX,1000H ;送双字
MOV [01ACH+2l,AX
9.6 可编程中断控制器 8259
一,8259A的内部结构中断服务寄存器中断请求寄存器
IR0
IR1
IR7
IR2
IR3
IR4
IR5
IR6
IR0
IR1
IR2
IR3
IR4
IR5
IR6
IR7
000
1
1
1、工作原理
3、接口电路 (设置偶地址 )
4、总线连接(缓冲方式和非缓冲方式)
2、单级 8259与 8259级联
9.6 可编程中断控制器 8259
二,8259A的中断管理方式
(一)、中断优先权管理
1.完全嵌套方式
8259A的中断请求输入端引入的中断具有固定的优先权排队顺序,IR0为最高优先级,IR1为次高优先级,依次类推,IR7为最低优先级。
9.6 可编程中断控制器 8259
2.特殊全嵌套方式特殊全嵌套方式和全嵌套方式基本相同,只有一点不同,就是在特殊全嵌套方式下,当处理某一级中断时,如果有同级的中断请求,那么,也会给予响应,从而实现一种对同级中断请求的特殊嵌套。
特殊全嵌套方式一般用在 8259A级连的系统中。
9.6 可编程中断控制器 8259
3.自动循环方式从 IR0— IR7引入的中断轮流具有最高优先权。
初始优先级队列规定为
IR0>IR1>IR2>IR3>IR4>IR5>IR6>IR7
如果 IR0端正好有中断请求,处理完后
IR1>IR2>IR3>IR4>IR5>IR6>IR7>IR0
如果 IR4端正好有中断请求,处理完后
IR5>IR6>IR7>IR0>IR1>IR2>IR3>IR4
9.6 可编程中断控制器 8259
4.优先级特殊循环方式最低优先级是由编程确定的,从而最高优先级也由此而定。
9.6 可编程中断控制器 8259
(三).中断屏蔽方式有两种方法:
第一、普通屏蔽方式。
第二、采用特殊屏蔽方式。
9.6 可编程中断控制器 8259
(四),8259A中断结束的管理方式可采用三种中断结束方式:
自动 EOI方式一般 EOI方式特殊 EOI方式中断服务寄存器中断请求寄存器
IR0
IR1
IR7
IR2
IR3
IR4
IR5
IR6
IR0
IR1
IR2
IR3
IR4
IR5
IR6
IR7
000
1
1
9.6 可编程中断控制器 8259
三,8259A编程
(一),8259A的初始化命令字
ICW1的格式和含义主要功能是中断信号的触发方式例如:上升沿触发,级联
0 0 0 1 0 0 0 1
9.6 可编程中断控制器 8259
三,8259A编程
(一),8259A的初始化命令字
ICW2的格式和含义功能是中断类型号例如:中断类型号为 08~ 0F
0 0 0 0 1 x x x
9.6 可编程中断控制器 8259
三,8259A编程
(一),8259A的初始化命令字
ICW3的格式和含义在 8259A有级联情况下使用主从
9.6 可编程中断控制器 8259
三,8259A编程
(一),8259A的初始化命令字
ICW4的格式和含义主要功能是中断嵌套方式选择,使能中断结束方式
D1= 1为自动 EOI,Dl= 0为非自动 EOI
D4位 SFNM为有级联时定义的,D4= 1为特殊完全嵌套方式,D4=0完全嵌套方式.
例如,0 0 0 0 0 0 0 1
9.6 可编程中断控制器 8259
三,8259A编程
(二),8259A的操作命令字
0CW1的格式和含义主要功能是确定屏蔽位
1表示禁止中断
0 0 0 1 0 0 0 1
9.6 可编程中断控制器 8259
三,8259A编程
(二),8259A的操作命令字
0CW2的格式和含义主要功能是 控制中断结束,优先权循环等操作如果采用一般 EOI方式
0 0 1 0 0 0 0 0
0
中断服务寄存器中断请求寄存器
IR0
IR1
IR7
IR2
IR3
IR4
IR5
IR6
IR0
IR1
IR2
IR3
IR4
IR5
IR6
IR7
000
1
1
MOV AL,20H
OUT 端口 (A0=0),AL
9.6 可编程中断控制器 8259
三,8259A编程
(二),8259A的操作命令字
0CW3的格式和含义主要功能是控制 8259A的中断屏蔽和读取寄存器的状态一般不用
9.7 中断举例中断传送方式的设计过程是:
一,硬件方面:
设定硬件的中断类型号 。
二,软件方面:
1,关中断;
2,填写中断入口地址表;
3,设置 8259A及其他编程芯片;
4,开中断;
5,编写中断服务子程序 。
举例一:软件中断
INTO中断执行结果由两个加数决定,
有溢出,BL= 0FFH;
无溢出,BL= 00。
INTO1 PROC ; 中断溢出处理
PUSH AX
MOV BL,0FFH
POP AX
IRET ;中断返回
INTO1 ENDP
DATA SEGMENT ;定义数据段
ADD1 DB?
ADD2 DB?
DATA ENDS
CODE SEGMENT ;定义代码段
ASSUME CS,CODE,DS:DATA
START,MOV AS,DATA
MOV DS,AX
MOV AX,0 ; 填写中断地址表
MOV ES,AX
MOV DI,04*4;存中断程序首地址的偏移量
MOV AX,OFFSET INTO1 ;可用 MOV AX,CS
CLD
STOSW;存中断程序首地址的段地址
MOV AX,SEG INTO1
STOSW
MOV BL,0 ; 主程序
MOV AL,ADD1 ;计算 ADD1+ ADD2
ADD AL,ADDD2
INTO ;若有溢出,转溢出处理
MOV AL,BL
MOV AX,4C00H
INT 21H
HLT
INTO1 PROC ; 中断溢出处理
PUSH AX
MOV BL,0FFH
POP AX
IRET ;中断返回
INTO1 ENDP;
CODE ENDS
END START
举例二:硬件中断下图是一个接口电路,用中断传送方式使 8255A的 A口的发光二极管依次发光,要求每个二极管在一个循环中发光
1S。 设 8255A端口地址为 80H- 86H,
8253端口地址为 88H- 8EH,主 8259端口地址为 90H- 96H,从 8259端口地址为
98H- 9EH
CA0
CA1
CA2
CA0
CA1
CA2
SP SP+5V 0V
/INTA
/INTA/INTAINT INT
INTR
IR0 …… IR7 IR0 …… IR7
OUT0 GATA0 CLK0
+5V
1KHz
A0 A1 …… A7
+5V
8259 8259
8255 8253
…
8255A的 A口工作方式可选为方式 0的输出,而 8253通道 0的工作方式可定为方式
0,即计数结束产生中断信号 。
8255A的方式控制字,10001011B。 即 A
输出,B口输入,C口输入 。
8253通道 0的方式控制字,00110001B。
即工作方式为方式 0,BCD码计数 。
8259设置特点
1、初始化具有顺序性
2、顺序为 ICW1,ICW2,ICW3,ICW4
主 8259设置
ICW1:上升沿触发,级联
端口 90H,00010001B
ICW2:中断类型码,端口 92H,08H
ICW3:主片从片标志,端口 92H,00000100B
ICW4:完全 中断嵌套方式,非自动中断结束方式
端口 92H,00000001B
从 8259设置
ICW1:上升沿触发,级联
端口 98H,00010001B
ICW2:中断类型码,端口 9AH,30H
ICW3:主片从片标志,端口 9AH,00000010B
ICW4:完全 中断嵌套方式,非自动中断结束方式
端口 9AH,00000001B
……
SHIFT_DAT DB 0FEH
……
CLI ;关中断
CLD ; 填写中断入口地址表
MOV AX,0
MOV ES,AX
MOV DI,4*31H
MOV AX,OFFSET INT_31H
MOV ES:[DI],AX
INC DI
INC DI
MOV AX,SEG INT_31H
MOV ES:[DI],AX; 设置主 8259
MOV AL,11H ; 设置 ICW1
OUT 90H,AL
MOV AL,08 ; 设置 ICW2
OUT 92H,AL
MOV AL,04 ; 设置 ICW3
OUT 92H,AL
MOV AL,01 ; 设置 ICW4
OUT 92H,AL
MOV AL,01101011B ; 设置 IOW1,开放 IR2,IR4,IR7中断
OUT 92H,AL; 设置从 8259
MOV AL,11H ; 设置 ICW1
OUT 98H,AL
MOV AL,30H ; 设置 ICW2
OUT 9AH,AL
MOV AL,02 ; 设置 ICW3
OUT 9AH,AL
MOV AL,01 ; 设置 ICW4
OUT 9AH,AL
MOV AL,00000000B ; 设置 IOW1,开放 IR0… IR7中断
OUT 9AH,AL; ; 设置 8255和 8253
MOV AL,10001011B ;设置 8255A
OUT 86H,AL
MOV AL,0
OUT 80H,AL
MOV AL,00110001B ;设置 8253通道 0
OUT 8EH,A
MOV AL,00
OUT 88H,AL
MOV AL,10H
OUT 88H,AL
STI ;开中断
…… ;执行其他程序中断服务子程序:
主要是对 8255 的 A口进行操作,使变量
SHIFT_DAT的内容左移,
重新设置 8253通道 0,为下一次中断信号产生作准备,
对 8259A传送一个 EOI命令,表示中断程序完成 。
INT31H PROC FAR ;中断服务子程序
PUSH AX ;保护现场
PUSHF
MOV AL,SHIFT_DAT ; 对 8255的 A口送数
OUT 80H,AL
ROL AL,1 ;变量 SHIFT_DAT左移
MOV SHIFT_DAT,AL ;准备下一次数据
MOV AL,00110001B ; 重新设置 8253
OUT 8EH,AL
MOV AL,00
OUT 88H,AL
MOV AL,10H
OUT 88H,AL; 发 EOI命令
MOV AL,20H; ;传送 EOI命令给 8259
OUT 98H,AL ;向从 8259发 EOI命令
OUT 90H,AL ;向主 8259发 EOI命令;
POPF ;恢复现场
POP AX
IRET ;中断返回
INT31H ENDP
9.8 IBM-PC机硬件中断
9.8,1 中断设置在 PC/XT机中,有一片 8259A中断控制芯片,可管理 8个中断源 。 在 PC/AT机中有两片 8259A中断控制芯片,可管理 15个中断源 。
9.8 IBM-PC机硬件中断
9.8,1 中断设置优先权主片,IR0,IR1
从片,IR0,IR1,IR2,IR3,IR4,IR4,IR5,IR6,IR7
主片,IR3,IR4,IR5,IR5,IR7
中断类型号主片,00H- 07H
从片,70H- 77H
9.8 IBM-PC机硬件中断
9.8,2 PC机中断资源的使用一、对中断屏蔽寄存器的操作主片 8259A中断屏蔽寄存器的 I/ O端口地址是 21H,
它的 8位对应控制 8个外部设备,通过设置这个寄存器的某位为 0或为 1来允许或禁止某外部设备的中断 。
某位为 0表示允许某种外设中断请求,某位为 1表示某种外没的中断请求被屏蔽 (禁止 )。
从片 8259A中断屏蔽寄存器的 I/ O端口地址是
A1H
例如,只允许键盘中断,可设置如下中断屏蔽字:
MOV AL,11111101B
OUT 21H,AL
如果系统重新增设键盘中断,则可用下列指令实现:
IN AL,21H
AND AL,11111101B
OUT 21H,AL
9.8 IBM-PC机硬件中断
9.8,2 PC机中断资源的使用二、中断结束命令在一次中断处理结束之前,还应给 8259A可编程中断控制器的中断命令寄存器发出中断结束命令
EOI,可采用一般的 EOI方式,中断命令寄存器的 I
/ O端口地址为 20H,结束外中断用下面的指令:
MOV AL,20H
OUT 20H,AL
同样,如果中断是从片 8259A的中断输入线产生的,则要同时对主片和从片的中断命令寄存器发
EOI命令 。 从片 8259A中断命令寄存器的 I/ O端口地址是 A0H
CPU就要浪费很多时间去等待外设。这样就引出一个快速的 CPU与慢速的外设之间数据传送的矛盾,这也是计算机在发展过程中遇到的严重问题之一。为解决这个问题,一方面要提高外设的工作速度,
另一方面发展了中断慨念。中断系统是计算机的重要指标之一。
9,1 中断原理
9,1,1 从无条件传送、条件传送到中断传送条件传送最大的缺点就是为了 CPU和外设在时间上配合正确,CPU花大量的时间用无条件方式对状态线进行查询,从而降低了整个系统的工作效率。
具有中断功能的 CPU中,有一个硬件部件专门用于检测外设的状态线。
检测状态信号状态信号有效?
外设处理外设处理检测状态信号主程序
9,1 中断原理
9,1,2 中断概念处理文档电话铃响暂停文档文档中作暂停记号电话交谈找出暂停记号位置继续处理文档执行主程序 ( 日常事务程序 )
中断申请信号有效 ( 中断请求 )
暂停执行主程序响应中断当前 PC 及寄存器入栈 ( 保护现场 )
处理外设要求 ( 中断服务 )
寄存器及 PC 出栈 ( 恢复现场及中断返回 )
继续执行主程序
9,1 中断原理
9,1,2 中断概念可见在中断传送方式下,外设应有请求 CPU
服务的权利,当外部设备准备好向 CPU传送数据,或者外设已准备就绪接收 CPU的数据,
或者有某些紧急情况要求处理,或者是定时时间到等等。这时,外设向 CPU发出中断请求,CPU接收到请求并在一定条件下,暂时停止执行原来的程序而转去中断处理,处理好中断服务再返回来执行原来程序,这就是一个中断概念。
9,1 中断原理
9,1,3 中断应用一、实时故障处理存储器出错检测电路存储器奇偶检测电路奇偶位中断请求信号
9,1 中断原理
9,1,3 中断应用二、分时操作,同时处理有了中断功能,CPU可命令多个外设同时工作。
虽然 CPU在不同的时间点上为不同的任务工作,
但宏观上看 CPU几乎同时为不同的任务工作,极大地发挥了 CPU高速性的特点。
处理任务 1
处理任务 2
处理任务 3
9,2 中断系统组成及其功能
9,2,1 三个与中断有关的触发器一、中断请求触发器
应该有两个特点:
1、它的输出可以作为中断请求信号,在满足一定条件的情况下把信号发送给 CPU,并在 CPU未响应时一直保存下去;
2、当 CPU满足一定条件下响应了该中断请求信号,执行了相关的操作后,该中断请求信号可以被撤除。
9,2 中断系统组成及其功能
9,2,1 三个与中断有关的触发器
D Q
R D
状态线中断请求外设读、写操作
CLK
+5V
8255A工作在方式 1—— 输入
A口的选通信号,当其有效时,
外设把数据打入 A口的输入缓冲器
A口的输入缓冲器,满,信号,
当其有效时表示 A口的输入缓冲器已暂存一个有效数据。
A口的中断请求信号。当其有效时,8255A的 A口向 CPU申请中断,要求 CPU从 A口取数中断允许信号。
9,2 中断系统组成及其功能
9,2,1 三个与中断有关的触发器二、中断屏蔽触发器
中断屏蔽触发器的功能就是决定中断请求触发器的输出信号是否可以作为中断请求信号发送给
CPU,这样 CPU通过对中断屏蔽触发器的设置就可以达到对中断源的控制。
中断屏蔽触 发 器
8255A工作在方式 1—— 输入
A口的选通信号,当其有效时,
外设把数据打入 A口的输入缓冲器
A口的输入缓冲器,满,信号,
当其有效时表示 A口的输入缓冲器已暂存一个有效数据。
A口的中断请求信号。当其有效时,8255A的 A口向 CPU申请中断,要求 CPU从 A口取数中断允许信号。
MOV AL,00001001 ;允许发中断
MOV 控制口,AL
MOV AL,00001000 ;屏蔽中断
MOV 控制口,AL
9,2 中断系统组成及其功能
9,2,1 三个与中断有关的触发器
CPU内部的中断允许触发器 IF
CPU通过对它进行设置来决定是否对发给它的中断请求信号进行响应。
有些 CPU,比如 8086CPU,设置了两种中断类型,可屏蔽中断和不可屏蔽中断 。可屏蔽中断受中断允许触发器控制,
只有当 IF为 1时,CPU才能响应中断请求信号。而不可屏蔽中断不受中断允许触发器的控制,只要中断请求信号有效,
不管 IF是否为 1,CPU就必须响应。因此不可屏蔽中断的中断优先级要大于可屏蔽中断的中断优先级。
IF?0 关中断 CLI
IF?1 开中断 STI
9,2 中断系统组成及其功能
9,2,2 再谈中断条件外设的中断请求信号要想发给 CPU并能最终得到 CPU的响应,必须要满足如下两个条件:
一个是中断屏蔽触发器处于非屏蔽状态。在这种情况下,中断请求信号才能发给 CPU。
但 CPU是否相应这个中断,还要看中断允许触发器是否处于开中断状态。只有 CPU是开中断的条件下,CPU才能进入中断响应过程,
处理中断事务。这就是第二个条件。
中断响应中断屏蔽 FF
中断允许 FF
CPU内的中断逻辑中断申请信号
INTR
9,2 中断系统组成及其功能
9,2,3 中断响应过程中断过程主要包括三个方面
外设发中断请求信号给 CPU即中断请求
CPU对中断请求信号所作出的反应即中断响应
CPU执行对外设操作的子程序即中断处理。
9,2 中断系统组成及其功能
9,2,3 中断响应过程一、中断申请
当中断屏蔽触发器状态为 1,则中断请求触发器输出的中断请求信号发给 CPU。
二、中断响应
CPU响应可屏蔽中断申请必须满足的 3个条件,
① 无总线请求;
② CPU被允许中断;
③ CPU执行完现行指令,
9,2 中断系统组成及其功能
9,2,3 中断响应过程三、中断处理
CPU响应中断后要自动完成三项任务
1,关闭中断;
2,CS,IP以及 FR的内容推入堆栈;
3、中断服务程序段地址送 CS中,偏移地址送 IP中。
一旦 CPU响应中断,就可转入中断服务程序之中。中断服务程序的结构如下:
push ax ; 1,保护现场
……
push bx
sti ; 2,开中断
…… ; 3,中断处理
cli ; 4,关中断
pop bx ; 5,恢复现场
……
pop ax
sti ; 6,开中断和 中断返回
reti
9,3 中断源识别及中断优先权在中断系统中一个非常关键的问题是
CPU如何知道是哪一个中断源发出的中断申请信号 。 只有正确地确定中断源,CPU
才能转到相应的中断服务程序为之服务 。
这里,确定中断源的方法被称为中断源识别或中断方式 。
!!!
9,3 中断源识别及中断优先权
9,3,1 中断源识别包括两个方面:
1,确定中断源,
2,找到该中断服务程序的首地址 。
下面我们给出解决问题的两种方案 。
9,3 中断源识别及中断优先权
9,3,1 中断源识别一、查询中断
IN AL,IPORT ;从输入接口取中断信息
TEST AL,80H ;是 0号设备请求吗?
JNZ SEVO ;是,转 0号设备服务程序
TEST AL,40H ;否,是 1号设备请求吗?
JNZ SEVl ;是,转 1号设备服务程序
TEST AL,20H ;否,是 2号设备请求吗?
JNZ SEV2 ;是,转 2号设备服务程序
TEST AL,10H ;否,是 3号设备请求吗?
JNZ SEV3 ;是,转 3号设备服务程序条件传送=查询中断?
特点:简单响应慢
9,3 中断源识别及中断优先权
9,3,1 中断源识别二、矢量中断中断申请信号 INTR
和中断响应信号 INTA是一对握手信号 。 在驱动一个中断事件过程中,
中断请求信号是外设发给 CPU的,当其有效时,
表示外设请求 CPU为之服务 。 而中断响应信号是
CPU发给外设的,当其有效时,表明 CPU可以为这个外设服务,同时要求外设提供中断类型号 。
9,3 中断源识别及中断优先权
9,3,1 中断源识别二、矢量中断
7
4
L
S
2
4
5
D Q
CLK
R D
A7
A6
A5
A4
A3
A2
A1
A0
+5V
中断申请接C P U 的D
7
~D
0
INTA
INTR
CS
T
9,3 中断源识别及中断优先权
9,3,2 中断优先权一、软件方案软件查询确定优先权的缺点是,响应中断慢
9,3 中断源识别及中断优先权
9,3,2 中断优先权二、硬件方案
1、链形电路这种方法是利用外设在系统中的物理位置来决定其中断优先权的中断申请 中断申请 中断申请中断允许入
IEI= 1,
允许发中断中断允许出 IEO= IEI INTR
0
0
1
9,3 中断源识别及中断优先权
9,3,2 中断优先权二、硬件方案
2、编码电路
74LSl48是一个 8到 3线的优先权编码器,它是一个 16个管脚双列直插式 TTL器件.
I0
I1
I7
000
I0
I1
I7
000
7
4
L
S
2
4
5
D Q
CLK
R D
A7
A6
A5
A4
A3
A2
A1
A0
T
CS
B7
B6
B5
B4
B3
B2
B1
B0
+5V
接C P U 的D
7
~D
0
INTA
INTR
7
4
L
S
1
4
8
I 7
I 6
I 5
I 4
I 3
I 2
I 1
I 0
A 2
A 1
A 0
INT 7
INT 6
INT 5
INT 4
INT 3
INT 2
INT 1
INT 0
9,4 8086中断系统
8086中断系统有两大类型的中断源,一类是由外部设备产生的中断,我们称之为 硬件中断,
硬件中断有时又称 外中断 。另一类是由指令在某种运行结果时产生的中断,我们称之为 软件中断 。另外对于硬件中断,又分为 不可屏蔽中断和可屏蔽中断,硬件中断是通过 CPU芯片的
INTR管脚或 NMI管脚从外部引入的。
中断类型号和中断服务子程序的入口地址之间的关系:
中断类型号n
×4
0000:4n+0
0000:4n+1
0000:4n+2
0000:4n+3
00
10
00
20
1000
2000
IP
CS
内存
9,4 8086中断系统
9,4,1 不可屏蔽中断所谓不可屏蔽中断就是用户不能通过
CPU内的中断允许触发器 IF控制的中断,
由 8086CPU的 NMI管脚引入 。 NMI中断请求采用上升沿触发方式,这种中断一旦产生,在 CPU内部直接生成中断类型号 02。
0000:4*2+0
0000:4*2+1
0000:4*2+2
0000:4*2+3
00
10
00
20
1000
2000
IP
CS
内存I F =0
IP,CS,FR进 栈
IP=[2*4+0]
CS=[2*4+2]
如何处理多个 NMI中断源?
9,4 8086中断系统
9,4,2 可屏蔽中断可屏蔽中断就是用户可以控制的中断,其途径是通过对 CPU内的中断允许触发器 IF的设置来禁止和允许 CPU响应中断 。 可屏蔽中断由
8086CPU的 INTR管脚引入 。 这种中断请求需要设备提供中断类型号,CPU响应中断后,取中断类型号的 4倍作为中断服务入口地址表的地址,通过查表得到相应的中断服务程序首地址,
转去执行相应的中断服务程序 。
0000:4*n+0
0000:4*n+1
0000:4*n+2
0000:4*n+3
00
10
00
20
1000
2000
内存I F =0
IP,CS,FR进栈
IP=[2*n+0]
CS=[2*n+2]
取中断类型号n
9,4 8086中断系统
9,4,3 软件中断软件中断是由 8086指令系统中的某些指令产生,或由这些指令运行后某种特定的结果产生。
9,4 8086中断系统
9,4,3 软件中断一、除法中断当进行除法运算时,若除数为 0或除数太小,使得商数大于相应寄存器所能表示的最大值,被称作除法出错。这时除法指令就相当于一个中断源,它向 CPU发出类型 0中断。
9,4 8086中断系统
9,4,3 软件中断二、溢出中断当算术运算产生溢出时,将在 INTO指令控制下向 CPU发出类型 4的中断,即溢出中断。
比如
mov al,40h
add al,40h
into
9,4 8086中断系统
9,4,3 软件中断三、单步中断和断点中断
(1)单步中断当 8086CPU的标志寄存器中的 TF标志为 1时,8086CPU
处于单步工作方式,这时 CPU在每条指令执行后自动产生类型 l的中断。
TF在标志寄存器的第 8位。
(2)断点中断
INT3指令是 1字节指令 (0CCH),
如何实现断点调试?
9,4 8086中断系统
9,4,3 软件中断四、软中断软中断是由中断指令引起的 。 中断指令的指令格式为 INT n (CD 21),操作数 n就是中断类型号 。 当 CPU执行完毕中断指令 INT
n后,就会立即产生一个中断类型号为 n的中断 。
int n?call far [4*n]
9.4 8086中断系统
9.4,4 中断概念的再讨论一、中断与调子程序之间的关系
1、中断过程实际上是 CPU从执行当前主程序转到执行为外设服务的子程序,因此从这个角度来看,是 中断过程一个调用子程序的过程。
2、但中断过程与子程序调用还是有很大差别的,首先调用子程序的过程是一个无条件过程,但中断过程的中断服务程序的调用一般是有条件的。其次子程序调用在整个程序执行中的位置是固定的。但对于硬件中断过程,只要条件满足,在整个程序执行的任意一时间点都有可能发生从主程序向中断服务子程序的转移事件,也就是说硬件中断产生的调用过程是随机的,不可预测的。
9.4 8086中断系统
9.4,4 中断概念的再讨论二、外部中断和 INT n 之间的关系结合中断指令 INT n,我们可以这样理解外部中断:当外部中断源发中断给 CPU时,如果 CPU满足一定的条件,处于开中断状态,CPU就可以响应中断,
这时外设在 CPU正在执行指令与其下一个指令之间,
等效,插入,了一个 INT n指令,这里的 n就是外设提供的中断类型号 。 注意这里用,等效,两字表示实际过程中是不存在插入 INT n指令的操作,但 CPU
确实完成了类似 INT n指令的功能,实现了主程序向中断程序的转移 。
……
MOV AL,10
MOV BX,100
……
MOV BL,100
ADD AL,BL
……
INT n
INT n
9.5 8086CPU的中断管理
9.5.1 8086CPU的中断处理顺序
8086CPU的中断优先权排列从高到低为:
1,除法出错中断,溢出中断,INT n;
2,NMl;
3,INTR;
4,单步中断 。
9.5 8086CPU的中断管理
9.5.2 8086CPU的中断服务入口地址表
9.5 8086CPU的中断管理
9.5,3 中断入口地址设置一,用串指令
CLI ;关中断
MOV AX,0
MOV ES,AX ;置附件段基地址为 0
MOV DI,n*4 ;置附件段偏移地址到 DI
MOV AX,OFFSET INT_VCE ;置中断程序首地址的偏移量到 AX
CLD
STOSW ;填偏移量到中断地址表
MOV AX,SEG INT_VCE ;置中断程序的段基地址到 AX
STOSW ;填段基地址到中断地址表
STI ;开中断
……
9.5 8086CPU的中断管理
9.5,3 中断入口地址设置二、用伪指令
INT- TBLSEGMENT AT 0 ;定义 INT- TBL段,段基地址为 0
ORG n*4 ;指定偏移地址
DD INT— VCE ;存中断程序入口地址
INT- TBL ENDS
…… ;其他处理
MCODE SEGMENT ;主程序
…… ;其他处理
INT— VCE PROC FAR ;中断服务程序
……
IRET
INT— VCE ENDP
……
8.5 8086CPU的中断管理
8.5,3 中断入口地址设置三、用系统调用使用 25H功能时要求:
AL=中断类型号
DS,DX=中断服务程序首地址的段,偏移地址注意 DS保护
PUSH DS
MOV DX,SEG INT60H ;段基地址送 DS
MOV DS,DX
MOV DX,OFFSET INT60H ;偏移地址送 DX
MOV AL,60H ;中断类型号送 AL
MOV AH,25H
INT 21H ; 25H功能调用
POP DS
8.5 8086CPU的中断管理
8.5,3 中断入口地址设置四、直接装入法若外设的中断类型号为 6BH,则此中断类型号对应的中断矢量表地址为从 00lACH开始的四个存储单元.设中断服务程序段地址是
1000H,偏移地址为 2000H。
MOV AX,,0
MOV DS,AX ;置数据段段基地址为 0
MOV AX,2000H
MOV [01ACH],AX ;对偏移地址为 01AC的单元
MOV AX,1000H ;送双字
MOV [01ACH+2l,AX
9.6 可编程中断控制器 8259
一,8259A的内部结构中断服务寄存器中断请求寄存器
IR0
IR1
IR7
IR2
IR3
IR4
IR5
IR6
IR0
IR1
IR2
IR3
IR4
IR5
IR6
IR7
000
1
1
1、工作原理
3、接口电路 (设置偶地址 )
4、总线连接(缓冲方式和非缓冲方式)
2、单级 8259与 8259级联
9.6 可编程中断控制器 8259
二,8259A的中断管理方式
(一)、中断优先权管理
1.完全嵌套方式
8259A的中断请求输入端引入的中断具有固定的优先权排队顺序,IR0为最高优先级,IR1为次高优先级,依次类推,IR7为最低优先级。
9.6 可编程中断控制器 8259
2.特殊全嵌套方式特殊全嵌套方式和全嵌套方式基本相同,只有一点不同,就是在特殊全嵌套方式下,当处理某一级中断时,如果有同级的中断请求,那么,也会给予响应,从而实现一种对同级中断请求的特殊嵌套。
特殊全嵌套方式一般用在 8259A级连的系统中。
9.6 可编程中断控制器 8259
3.自动循环方式从 IR0— IR7引入的中断轮流具有最高优先权。
初始优先级队列规定为
IR0>IR1>IR2>IR3>IR4>IR5>IR6>IR7
如果 IR0端正好有中断请求,处理完后
IR1>IR2>IR3>IR4>IR5>IR6>IR7>IR0
如果 IR4端正好有中断请求,处理完后
IR5>IR6>IR7>IR0>IR1>IR2>IR3>IR4
9.6 可编程中断控制器 8259
4.优先级特殊循环方式最低优先级是由编程确定的,从而最高优先级也由此而定。
9.6 可编程中断控制器 8259
(三).中断屏蔽方式有两种方法:
第一、普通屏蔽方式。
第二、采用特殊屏蔽方式。
9.6 可编程中断控制器 8259
(四),8259A中断结束的管理方式可采用三种中断结束方式:
自动 EOI方式一般 EOI方式特殊 EOI方式中断服务寄存器中断请求寄存器
IR0
IR1
IR7
IR2
IR3
IR4
IR5
IR6
IR0
IR1
IR2
IR3
IR4
IR5
IR6
IR7
000
1
1
9.6 可编程中断控制器 8259
三,8259A编程
(一),8259A的初始化命令字
ICW1的格式和含义主要功能是中断信号的触发方式例如:上升沿触发,级联
0 0 0 1 0 0 0 1
9.6 可编程中断控制器 8259
三,8259A编程
(一),8259A的初始化命令字
ICW2的格式和含义功能是中断类型号例如:中断类型号为 08~ 0F
0 0 0 0 1 x x x
9.6 可编程中断控制器 8259
三,8259A编程
(一),8259A的初始化命令字
ICW3的格式和含义在 8259A有级联情况下使用主从
9.6 可编程中断控制器 8259
三,8259A编程
(一),8259A的初始化命令字
ICW4的格式和含义主要功能是中断嵌套方式选择,使能中断结束方式
D1= 1为自动 EOI,Dl= 0为非自动 EOI
D4位 SFNM为有级联时定义的,D4= 1为特殊完全嵌套方式,D4=0完全嵌套方式.
例如,0 0 0 0 0 0 0 1
9.6 可编程中断控制器 8259
三,8259A编程
(二),8259A的操作命令字
0CW1的格式和含义主要功能是确定屏蔽位
1表示禁止中断
0 0 0 1 0 0 0 1
9.6 可编程中断控制器 8259
三,8259A编程
(二),8259A的操作命令字
0CW2的格式和含义主要功能是 控制中断结束,优先权循环等操作如果采用一般 EOI方式
0 0 1 0 0 0 0 0
0
中断服务寄存器中断请求寄存器
IR0
IR1
IR7
IR2
IR3
IR4
IR5
IR6
IR0
IR1
IR2
IR3
IR4
IR5
IR6
IR7
000
1
1
MOV AL,20H
OUT 端口 (A0=0),AL
9.6 可编程中断控制器 8259
三,8259A编程
(二),8259A的操作命令字
0CW3的格式和含义主要功能是控制 8259A的中断屏蔽和读取寄存器的状态一般不用
9.7 中断举例中断传送方式的设计过程是:
一,硬件方面:
设定硬件的中断类型号 。
二,软件方面:
1,关中断;
2,填写中断入口地址表;
3,设置 8259A及其他编程芯片;
4,开中断;
5,编写中断服务子程序 。
举例一:软件中断
INTO中断执行结果由两个加数决定,
有溢出,BL= 0FFH;
无溢出,BL= 00。
INTO1 PROC ; 中断溢出处理
PUSH AX
MOV BL,0FFH
POP AX
IRET ;中断返回
INTO1 ENDP
DATA SEGMENT ;定义数据段
ADD1 DB?
ADD2 DB?
DATA ENDS
CODE SEGMENT ;定义代码段
ASSUME CS,CODE,DS:DATA
START,MOV AS,DATA
MOV DS,AX
MOV AX,0 ; 填写中断地址表
MOV ES,AX
MOV DI,04*4;存中断程序首地址的偏移量
MOV AX,OFFSET INTO1 ;可用 MOV AX,CS
CLD
STOSW;存中断程序首地址的段地址
MOV AX,SEG INTO1
STOSW
MOV BL,0 ; 主程序
MOV AL,ADD1 ;计算 ADD1+ ADD2
ADD AL,ADDD2
INTO ;若有溢出,转溢出处理
MOV AL,BL
MOV AX,4C00H
INT 21H
HLT
INTO1 PROC ; 中断溢出处理
PUSH AX
MOV BL,0FFH
POP AX
IRET ;中断返回
INTO1 ENDP;
CODE ENDS
END START
举例二:硬件中断下图是一个接口电路,用中断传送方式使 8255A的 A口的发光二极管依次发光,要求每个二极管在一个循环中发光
1S。 设 8255A端口地址为 80H- 86H,
8253端口地址为 88H- 8EH,主 8259端口地址为 90H- 96H,从 8259端口地址为
98H- 9EH
CA0
CA1
CA2
CA0
CA1
CA2
SP SP+5V 0V
/INTA
/INTA/INTAINT INT
INTR
IR0 …… IR7 IR0 …… IR7
OUT0 GATA0 CLK0
+5V
1KHz
A0 A1 …… A7
+5V
8259 8259
8255 8253
…
8255A的 A口工作方式可选为方式 0的输出,而 8253通道 0的工作方式可定为方式
0,即计数结束产生中断信号 。
8255A的方式控制字,10001011B。 即 A
输出,B口输入,C口输入 。
8253通道 0的方式控制字,00110001B。
即工作方式为方式 0,BCD码计数 。
8259设置特点
1、初始化具有顺序性
2、顺序为 ICW1,ICW2,ICW3,ICW4
主 8259设置
ICW1:上升沿触发,级联
端口 90H,00010001B
ICW2:中断类型码,端口 92H,08H
ICW3:主片从片标志,端口 92H,00000100B
ICW4:完全 中断嵌套方式,非自动中断结束方式
端口 92H,00000001B
从 8259设置
ICW1:上升沿触发,级联
端口 98H,00010001B
ICW2:中断类型码,端口 9AH,30H
ICW3:主片从片标志,端口 9AH,00000010B
ICW4:完全 中断嵌套方式,非自动中断结束方式
端口 9AH,00000001B
……
SHIFT_DAT DB 0FEH
……
CLI ;关中断
CLD ; 填写中断入口地址表
MOV AX,0
MOV ES,AX
MOV DI,4*31H
MOV AX,OFFSET INT_31H
MOV ES:[DI],AX
INC DI
INC DI
MOV AX,SEG INT_31H
MOV ES:[DI],AX; 设置主 8259
MOV AL,11H ; 设置 ICW1
OUT 90H,AL
MOV AL,08 ; 设置 ICW2
OUT 92H,AL
MOV AL,04 ; 设置 ICW3
OUT 92H,AL
MOV AL,01 ; 设置 ICW4
OUT 92H,AL
MOV AL,01101011B ; 设置 IOW1,开放 IR2,IR4,IR7中断
OUT 92H,AL; 设置从 8259
MOV AL,11H ; 设置 ICW1
OUT 98H,AL
MOV AL,30H ; 设置 ICW2
OUT 9AH,AL
MOV AL,02 ; 设置 ICW3
OUT 9AH,AL
MOV AL,01 ; 设置 ICW4
OUT 9AH,AL
MOV AL,00000000B ; 设置 IOW1,开放 IR0… IR7中断
OUT 9AH,AL; ; 设置 8255和 8253
MOV AL,10001011B ;设置 8255A
OUT 86H,AL
MOV AL,0
OUT 80H,AL
MOV AL,00110001B ;设置 8253通道 0
OUT 8EH,A
MOV AL,00
OUT 88H,AL
MOV AL,10H
OUT 88H,AL
STI ;开中断
…… ;执行其他程序中断服务子程序:
主要是对 8255 的 A口进行操作,使变量
SHIFT_DAT的内容左移,
重新设置 8253通道 0,为下一次中断信号产生作准备,
对 8259A传送一个 EOI命令,表示中断程序完成 。
INT31H PROC FAR ;中断服务子程序
PUSH AX ;保护现场
PUSHF
MOV AL,SHIFT_DAT ; 对 8255的 A口送数
OUT 80H,AL
ROL AL,1 ;变量 SHIFT_DAT左移
MOV SHIFT_DAT,AL ;准备下一次数据
MOV AL,00110001B ; 重新设置 8253
OUT 8EH,AL
MOV AL,00
OUT 88H,AL
MOV AL,10H
OUT 88H,AL; 发 EOI命令
MOV AL,20H; ;传送 EOI命令给 8259
OUT 98H,AL ;向从 8259发 EOI命令
OUT 90H,AL ;向主 8259发 EOI命令;
POPF ;恢复现场
POP AX
IRET ;中断返回
INT31H ENDP
9.8 IBM-PC机硬件中断
9.8,1 中断设置在 PC/XT机中,有一片 8259A中断控制芯片,可管理 8个中断源 。 在 PC/AT机中有两片 8259A中断控制芯片,可管理 15个中断源 。
9.8 IBM-PC机硬件中断
9.8,1 中断设置优先权主片,IR0,IR1
从片,IR0,IR1,IR2,IR3,IR4,IR4,IR5,IR6,IR7
主片,IR3,IR4,IR5,IR5,IR7
中断类型号主片,00H- 07H
从片,70H- 77H
9.8 IBM-PC机硬件中断
9.8,2 PC机中断资源的使用一、对中断屏蔽寄存器的操作主片 8259A中断屏蔽寄存器的 I/ O端口地址是 21H,
它的 8位对应控制 8个外部设备,通过设置这个寄存器的某位为 0或为 1来允许或禁止某外部设备的中断 。
某位为 0表示允许某种外设中断请求,某位为 1表示某种外没的中断请求被屏蔽 (禁止 )。
从片 8259A中断屏蔽寄存器的 I/ O端口地址是
A1H
例如,只允许键盘中断,可设置如下中断屏蔽字:
MOV AL,11111101B
OUT 21H,AL
如果系统重新增设键盘中断,则可用下列指令实现:
IN AL,21H
AND AL,11111101B
OUT 21H,AL
9.8 IBM-PC机硬件中断
9.8,2 PC机中断资源的使用二、中断结束命令在一次中断处理结束之前,还应给 8259A可编程中断控制器的中断命令寄存器发出中断结束命令
EOI,可采用一般的 EOI方式,中断命令寄存器的 I
/ O端口地址为 20H,结束外中断用下面的指令:
MOV AL,20H
OUT 20H,AL
同样,如果中断是从片 8259A的中断输入线产生的,则要同时对主片和从片的中断命令寄存器发
EOI命令 。 从片 8259A中断命令寄存器的 I/ O端口地址是 A0H