第七章
1. 什么叫中断?什么叫可屏蔽中断和不可屏蔽中断?
答:当CPU正常运行程序时,由于微处理器内部事件或外设请求,引起CPU中断正在运行的程序,转去执行请求中断的外设(或内部事件)的中断服务子程序,中断服务程序执行完毕,再返回被中止的程序,这一过程称为中断。
可屏蔽中断由引脚INTR引入,采用电平触发,高电平有效,INTR信号的高电平必须维持到CPU响应中断才结束。可以通过软件设置来屏蔽外部中断,即使外部设备有中断请求,CPU可以不予响应。当外设有中断申请时,在当前指令执行完后,CPU首先查询IF位,若IF=0,CPU就禁止响应任何外设中断;若IF=1,CPU就允许响应外设的中断请求。 不可屏蔽中断由引脚NMI引入,边沿触发,上升沿之后维持两个时钟周期高电平有效。不能用软件来屏蔽的,一旦有不可屏蔽中断请求,如电源掉电等紧急情况,CPU必须予以响应。
2. 列出微处理器上的中断引脚和与中断有关的指令。 答:INTR:可屏蔽中断请求输入引脚。
NMI:不可屏蔽中断请求输入引脚
INTA:可屏蔽中断响应引脚
INT n :软件中断指令,其中n为中断类型号
INTO:溢出中断,运算后若产生溢出,可由此指令引起中断。 CLI:中断标志位IF清0 STI:置位中断标志位为1
3. 8086/8088系统中可以引入哪些中断? 答:(1)外部中断
两种外部中断:不可屏蔽中断NMI和可屏蔽中断INTR (2)内部中断
内部中断又称软件中断,有三种情况引起: ①INT n :中断指令引起的中断
②CPU的某些运算错误引起的中断:包括除法错中断和溢出中断 ③由调试程序debug设置的中断:单步中断和断点中断。 4. CPU响应中断的条件是什么?简述中断处理过程。 答:CPU响应中断要有三个条件:
外设提出中断申请;本中断位未被屏蔽;中断允许。 可屏蔽中断处理的过程一般分成如下几步:
中断请求;中断响应;保护现场;转入执行中断服务子程序;恢复现场和中断返回。 CPU在响应外部中断,并转入相应中断服务子程序的过程中,要依次做以下工作: ⑴从数据总线上读取中断类型号,将其存入内部暂存器。 ⑵将标志寄存器PSW的值入钱。
⑶将PSW中的中断允许标志IF和单步标志TF清0,以屏蔽外部其它中断请求,避免CPU以单步方式执行中断处理子程字。
⑷保护断点,将当前指令下面一条指令的段地址CS和指令指针IP的值入栈,中断处理完毕后,能正确返回到主程序继续执行。
⑸根据中断类型号到中断向量表中找到中断向量,转入相应中断服务子程序。
⑹中断处理程序结束以后,从堆栈中依次弹出IP、CS和PSW,然后返回主程序断点
处,继续执行原来的程序。
5. 中断服务子程序中中断指令STI放在不同位置会产生什么不同结果?中断嵌套时,STI指令应如何设置?
答:由于响应中断时CPU自动关闭中断(IF=0),故在中断服务子程序中STI指令后方可实现中断嵌套。一般在中断服务子程序中保护现场后即设置开中断指令STI(IF=1),以便实现中断嵌套。
6. 中断结束命令EOI放在程序不同位置处会产生什么不同结果?
答:中断结束命令EOI后,清除中断服务寄存器中的标志位,即允许响应同级或低级中断,为避免错误,一般将中断结束命令EOI置于中断服务子程序结束前。 7. 中断向量表的功能是什么?
答:中断向量表又称中断服务程序入口地址表。
将每个设备的中断服务程序入口地址(矢量地址)集中,依次放在中断向量表中。当CPU响应中断后,控制逻辑根据外设提供的中断类型号查找中断向量表,然后将中断服务程序的入口地址送到段寄存器和指令指针寄存器,CPU转入中断服务子程序,这样可大大加快中断处理的速度。
8086/8088系统允许处理256种类型的中断,对应类型号为0~FFH。在存储器的00000H~003FFH,占1K字节空间,用作存放中断向量。每个类型号占4个字节,高2个字节存放中断入口地址的段地址,低2个字节存放段内偏移地址。
8. 假定中断类型号15的中断处理程序的首地址为ROUT15,编写主程序为其建立一个中断向量。
PUSH ES MOV AX,0 MOV ES,AX MOV DI,54H ;15H*4 MOV AX,OFFSET ROUT15 ;中断处理程序的偏移→AX CLD STOSW
MOV AX,SEG ROUT15 ;中断处理程序的段地址→AX STOSW POP ES
9. 8086/8088CPU如何获得中断类型号? 答:对于内部中断
①INT n :n即为中断类型号
②除法错中断自动获得类型号0,INTO溢出中断自动获得中断类型号4 ③单步中断自动获得类型号1,断点中断自动获得类型号3。 对于外部中断:
① 不可屏蔽中断NMI:自动获得中断类型号2 ② 可屏蔽中断INTR:
CPU响应可屏蔽中断,对中断接口电路发出两个中断响应信号INTA,中断接口电路收到第二个INTA以后,通过数据线向CPU送中断类型号。
10. 给定SP=0100H,SS=0500H,PSW=0240H,在存储单元中已有内容为(00024H)=0060H,(00026H)=1000H,在段地址为0800H及偏移地址为00A0H的单元中有一条中断指令INT 9,
试问执行INT 9指令后,SP、SS、IP、PSW的内容是什么?栈顶的三个字是什么?
答:执行INT 9指令,标志寄存器PSW、下一条指令的段地址CS和指令指针IP的值分别入栈,PSW中的中断允许标志IF和单步标志TF清0,中断向量表的中断入口地址送CS和IP,转入中断服务子程序。所以此时SP=00FAH,SS=0500H,CS=1000H,IP=0060H,PSW=0040H。栈顶的三个字是:(0500H:00FAH)=00A2H、(0500H:00FCH)=0800H、(0500H:00FEH)=0240H 标志寄存器PSW 执行INT 9前 执行INT 9后 PSW=0040H
X X X X OF 0 0 0 0 0 0 0 0
0 0
DF 0 0
IF1 0
TF0 0
SF 0 0
ZF1 1
XAF 00
0 0
X PF 0 0
0 0
X CF 0 0 0 0
11. 8259A优先权管理方式有哪几种?中断结束方式又有哪几种? 答:8259A优先权管理方式有如下4种: (1)全嵌套方式
此方式下,中断优先级分配固定级别0~7级,IR0具有最高优先级,IR7优先级最低。 (2)特殊全嵌套工作方式
此种工作方式主要用于8259A级联情况。此方式与全嵌套工作方式基本相同,区别在于当处理某级中断时,有同级中断请求进入,8259A也会响应,从而实现了对同级中断请求的特殊嵌套。
(3)优先级自动循环方式
优先级可以改变,初始优先级次序为IR0~IR7,当任何一级中断被处理完后,它的优先级别变为最低,将最高优先级赋给原来比它低一级的中断请求。 (4)优先级特殊循环方式
特殊循环方式下,初始时优先级由程序指定,而不是固定的。 8259A中断结束方式有如下3种: (1)普通EOI结束方式
在全嵌套工作方式下,任何一级中断,处理结束返回上一级程序前,CPU向8259A传送EOI结束命令字,8259A收到EOI结束命令后,自动将ISR寄存器中级别最高的置1位清0。
(2)特殊EOI结束方式
在非全嵌套工作方式下,中断服务寄存器是无法确定哪一级中断为最后响应和处理的,此时要采用特殊SEOI结束方式。CPU向8259A发特殊EOI结束命令字,命令字中将当前要清除的中断级别也传给8259A,此时8259将ISR寄存器中指定级别的对应位清0。 (3)自动EOI结束方式
在自动AEOI方式中,任何一级中断被响应后,ISR寄存器对应位置1,但在CPU进入
中断响应周期,发第二个INTA脉冲后,自动将ISR寄存器中对应位清0。
12. 单片8259A在全嵌套中断工作方式下,要写哪些初始化命令字及操作命令字? 答:初始化命令字需要写:ICW1,ICW2,ICW4。
操作命令字需要写:OCW1中断屏蔽操作命令字(根据需要,若不需要可不写)
OCW2优先权循环方式和中断结束方式操作字
13. 系统中新增加一个中断源,在软件上应增加哪些内容,此中断系统才能正常工作? 答:需要确定中断源的中断类型,然后将中断服务程序的入口地址放入中断向量表中。编写相应的中断服务程序。
14. 系统中有3个中断源,从8259A的IR0、IR2、IR4端引入中断,以边沿触发,中断类型号分别为50H、52H、54H,中断入口地址分别为5020H、6100H、3250H,段地址为1000H。使用完全嵌套方式,普通EOI结束,试编写初始化程序,使CPU能正确响应任何一级中断;并编写一段中断服务子程序,保证中断嵌套的实现和正确返回。 答:;初始化程序 设8259A的端口地址为20H和21H ;设置中断向量表 MOV AX, 1000H ;段地址 MOV DS, AX MOV DX, 5020H ;偏移地址 MOV AL, 50H ;中断类型号 MOV AH, 25H INT 21H ;写50H的中断入口地址 MOV DX, 6100H ;偏移地址 MOV AL, 52H ;中断类型号 INT 21H ;写52H的中断入口地址 MOV DX, 3250H ;偏移地址 MOV AL, 54H ;中断类型号 INT 21H ;写54H的中断入口地址
;8259A初始化命令字 MOV AL, 13H ;定义ICW1,单片,边沿触发 OUT 20H, AL MOV AL, 50H ;定义ICW2,中断号50H~57H OUT 21H, AL MOV AL, 01H ;定义ICW4,完全嵌套, 非缓冲, 普通EOI OUT 21H, AL MOV AL, 0EAH ;定义OCW1,屏蔽IR1,3,5,6,7 OUT 21H, AL
;中断服务子程序 PUSH AX ;保护现场 …… STI ;开中断 …… ;中断处理 CLI ;关中断
MOV AL,20H ;定义OCW2,普通EOI结束命令 OUT 20H,AL …… POP AX ;恢复现场 IRET ;中断返回
15. 如外设A1、A2、A3、A4、A5按完全嵌套优先级排列规则,外设A1的优先级最高,A5最低。若中断请求的次序如下所示,试给出各外设的中断处理程序的次序。(假设所有的中断处理程序开始后就有STI指令)
(1)外设A3和A4同时发出中断请求;
(2)在外设A3的中断处理中,外设A1发出中断请求;
(3)在外设A1的中断处理未完成前,发出EOI结束命令,外设A5发出中断请求 答:外设的中断处理程序的次序为:A3→A1→A3→A4→A5
16. 某系统中有3片8259A级联使用,1片为8259A主片,2片为8259A从片,从片接入8259A主片的IR2和IR5端,并且当前8259A主片的IR3及两片8259A从片的IR4各接有一个外部中断源。中断类型基号分别为80H,90H,A0H,中断入口段地址为2000H,偏移地址分别为1800H,2800H,3800H,主片8259A的端口地址为F8H,FAH。一片8259A从片的端口地址为FCH,FEH,另一片为FEECH,FEEEH。中断采用电平触发,全嵌套工作方式,普通EOI结束。 (1)画出硬件连接图。 (2)编写初始化程序。 答:
A1 D7~D0INTA RD WR INTR1 70INTCAS001#从8259ACAS11CAS22IRSP/EN44INTCAS002#从8259A8259ACAS11CAS22IRSP/EN44GNDCS A0 D7~D0INTA RD WR INT0 70CAS00CAS1主8259A8259A1CAS22IR5IR3IR2SP/EN532VCCCC GND硬件连接图(1)中断向量表形成 MOV AX,2000H MOV DS,AX ;DS中为段地址 MOV DX,1800H ;DX中为偏移地址 MOV AL,83H ;中断类型号为83H MOV AH,25H INT 21H ;设置类型号83H的中断向量 MOV DX,2800H MOV AL,94H INT 21H ;设置类型号94H的中断向量
MOV DX,3800H MOV AL,0A4H INT 21H ;设置类型号A4H的中断向量 (2)主片8259A初始化编程:端口地址为F8H和FAH MOV AL,00011001B(19H);定义ICW1,主片级联,电平触发 OUT 0F8H,AL ;发ICW1命令 MOV AL,80H ;IR0的中断类型号为80H OUT 0FAH,AL ;发ICW2命令 MOV AL,00100100B(24H);定义ICW3,IR2和IR5接从片 OUT 0FAH,AL MOV AL,00000001B(01H);定义ICW4,完全嵌套,非缓冲 OUT 0FAH,AL ;非自动EOI结束方式 MOV AL,11010011B(0D3H);定义OCW1,允许IR2、IR3 OUT 0FAH,AL ;IR5中断,其余中断请求屏蔽 (3)1#从片8259A初始化编程:端口地址为FCH和FEH MOV AL,00011001B(19H);定义ICW1,片从级联,电平触发 OUT 0FCH,AL ;发ICW1命令 MOV AL,90H ;IR0的中断类型号为90H OUT 0FEH,AL ;发ICW2命令 MOV AL,00000010B(02H);定义ICW3,1#从片接主片的IR2 OUT 0FEH,AL MOV AL,00000001B(01H);定义ICW4,完全嵌套,非缓冲 OUT 0FEH,AL ;非自动EOI结束方式 MOV AL,11101111B(0EFH);定义OCW1,允许IR4中断, OUT 0FEH,AL ;其余中断请求屏蔽
(4)2#从片8259A初始化编程:端口地址为FEECH和FEEEH MOV AL,00011001B(19H);定义ICW1,片从级联,电平触发 MOV DX,0FEECH OUT DX,AL ;发ICW1命令 MOV AL,0A0H ;IR0的中断类型号为A0H MOV DX,0FEEEH OUT DX,AL ;发ICW2命令 MOV AL,00000101B(05H);定义ICW3,2#从片接主片的IR5 OUT DX,AL MOV AL,00000001B(01H);定义ICW4,完全嵌套,非缓冲 OUT DX,AL ;非自动EOI结束方式 MOV AL,11101111B(0EFH);定义OCW1,允许IR4中断, OUT DX,AL ;其余中断请求屏蔽