微机原理与接口技术第八章习题解答
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
微机原理与接口技术(楼顺天第二版)习题解答
第8章中断系统与可编程中断控制器8259A
8、1答:(1)非屏蔽,可屏蔽;(2)IF=1,完成当前总线操作,执行完当前指令;(3)电平触发,边沿触发;(4)7,22;(5)IN3,12CH。
8、2 答:(1)A; (2)C; (3)C; (4)A; (5)A;
(6)D; (7)B; (8)B; (9)C。
8、3答:在CPU执行程序的过程中,由于某个事件的发生,CPU暂停当前正在执行的程序,转去执行处理该事件的一个中断服务程序,待中断服务程序执行完成后,CPU再返回到原被中断的程序继续执行。
这个过程称为中断。
8086微机系统中有3种中断:
1)外部可屏蔽中断。
2)外部不可屏蔽中断。
3)内部中断
其中,内部中断又分5种,分别为:除法错中断,单步中断,断点中断,溢出中断以及INT N软件中断。
8、4 答:通常用若干位二进制编码来给中断源编号,该编号称为中断类型号。
8086微处理器用8位二进制码表示一个中断类型,有256个不同的中断。
这些中断可以划分为内部中断、外部不可屏蔽中断、外部可屏蔽中断三类。
用处:使CPU识别中断源,从而能正确地转向该中断源对应的中断服务程序入口。
8、5 答:微处理器在处理低级别中断的过程中,如果出现了级别高的中断请求,微处理器停止执行低级中断的处理程序而去优先处理高级中断,等高级中断处理完毕后,再接着执行低级的未处理完的程序,这种中断处理方式成为中断嵌套。
使用中断嵌套的好处就是能够提高中断响应的实时性。
对于某些对实时性要求较高的操作,必须赋予较高的优先级与采取中断嵌套的方式,才能保证系统能够及时响应该中断请求。
对于可屏蔽中断,实现中断嵌套的条件有:
(1)微处理器处于中断允许状态(IF=1)
(2)中断请求的优先级高于正在执行的中断处理程序的优先级。
(3)中断请求未被8259屏蔽。
(4)没有不可屏蔽中断请求与总线请求。
8、6 答:中断向量为每个中断服务子程序的入口地址,为32位(16位的偏移地址与16位的段
地址),在中断向量表中占用4个地址单元。
在8086CPU组成的计算机系统中,采用最低的1024个地址单元(称为0页)来存储中断向量。
这1024个地址单元成为中断向量表。
因此,中断类型号为1FH的中断向量,在中断向量表中的存储位置为1FH×4=07CH。
中断类型号为1FH的中断向量在中断向量表中的存放位置如图8、6所示。
图8、6 中断类型号为1FH的中断向量在中断向量表中的存放位置
8、7 答:中断向量表就是用来存放中断向量的。
就是中断类型号与它对应的中断服务程序入口地址之间的换算表。
1)CPU获得中断类型号n后,将当前PSW、CS与IP的内容依次压入堆栈,保存断点的
状态与断点地址,以便返回时恢复。
2)将PSW中的IF位与TF位清0,关闭中断。
3)把地址为4×n与4×n+1两个单元的16位数作为中断服务程序入口的偏移地址置
入IP,把地址为4×n+2与4×n+3两个单元的16位数作为中断服务程序入口的段
地址置入CS。
4)转入中断服务程序。
8、8答:在IF位为1情况下,从INTR端加入中断请求信号开始,到进入中断服务程序为止所经过的一系列操作,称为可屏蔽中断的响应过程。
首先等待当前指令结束后,进入中断响应周期。
然后,从微处理器外部的中断控制逻辑获得中断类型号。
随后把当前的PSW、CS与IP 的内容依次压入堆栈,接着清除PSW中的IF位与TF位为0。
最后把中断服务程序的入口地址置入IP与CS。
至此,完成了可屏蔽中断的响应过程,开始进入中断服务程序。
IR~IR中断请求信号。
当外部中8、9 答:IRR:中断请求寄存器,用来锁存外部设备送来的
70
有中断请求时,IRR中与之对应的第i位被置1。
该寄存器内容可以被微处理器断请求线IR
i
读出。
IMR:用于设置中断请求的屏蔽信号。
此寄存器第i 位被置1时,与之对应的外部中断请求线IR i 被屏蔽,不能向微处理器发出INT 信号。
ISR:用于记录当前正在被服务的所有中断级,包括尚未服务完而中途被更高优先级打断的中断级。
若微处理器响应了IR i 中断请求,则ISR 中与之对应的第i 位置1。
中断处理结束前,要用指令清除这一位。
8、10 答:初始化编程就就是指对ICW(初始化命令字)的初始化,对ICW 的初始化有一定的顺序,必须从ICW1开始。
对中断控制器8259A 的初始化编程次序如图8、10所示。
图8、10 对中断控制器8259A 的初始化编程次序
8、11 答:一片8259可控制8级中断,第1片通过级联8片8259可将中断扩充至64级。
所以组成该中断机构共需9片8259。
8、12 答:在全嵌套方式下,中断优先级的级别就是固定的,即0IR 优先级最高,~IR 16IR 逐级次之,7IR 最低。
如果对8259A 进行初始化后没有设置其她优先级别,那么8259A 就按全嵌套方式工作。
8、13 答:(1)设备3与4同时发出中断请求;
中断处理次序为:D3→D4,示意图如图8、13(a)所示。
D3,D4同时
请求
图8、13(a)设备3与4同时发出中断请求的中断处理程序的次序示意图
(2)设备3与4同时发出中断请求,并在设备3的中断处理程序完成之前,设备2发出中断请求;
中断处理次序为: D3→D2→D3→D4,示意图如图8、13(b)所示。
D3,D4同时
D2请求
图8、13(b)中断处理程序的次序示意图
(3)设备1、3、5同时发出中断请求,在设备3的中断处理程序完成之前,设备2发出中断请求。
中断处理次序为:D1→D3→D2→D3→D5,示意图如图8、13(c)所示。
D1,D3,D5
D2请求
图8、13(c)中断处理程序的次序示意图
8、14 答:ICW1、OCW2与OCW3共用一个端口地址,但在命令字中通过命令字的两位取值不同来区分,ICW2、ICW3、ICW4与OCW1根据命令字的先后次序区分。
8、15 答:IMR 为8259内决定就是否屏蔽接入8259的中断请求的,IF 就是8086CPU 内部决定就是否可以响应外部非屏蔽中断的标志位。
在中断系统中IMR 决定外部中断请求能否被8259转发给CPU,IF 决定CPU 能否响应INTR 引脚的中断请求。
8、16 答:在二片以上的8259芯片级联的情况。
主片的ICW3的每一位确定哪一个INi 引脚接从片,从片的ICW3的低三位的组合确定从片的INT 接主片的哪一个INi 。
8、17 答:8259A 利用优先权处理器来识别与管理中断请求信号的优先级别。
当几个中断请求信号同时出现时,优先权处理器根据控制逻辑规定的优先权级别与IMR 的内容来判断这些请求信号的最高优先级。
微处理器响应中断请求时,把优先权最高的IRR 中的“1”送入ISR 、。
当8259A 正在为某一级中断服务时,若又出现新的中断请求,则由优先权处理器判断新出现的中断请求的级别就是否高于正在处理的那一级。
若就是,则进入多重中断处理。
8259A 有5种中断优先级管理方式。
(1)完全嵌套方式:按固定优先级高低来管理中断,若8259A 初始化时未对优先级管理方式编程,则8259A 自动进入该方式;
(2)自动循环方式:中断源的优先级将随中断响应过程的结束而随时跟着改变的中断优先级管理方式。
可用两种方式使8259A 进入自动循环方式:一就是在中断服务程序末尾发一条普通EOI 循环命令;二就是在主程序或中断服务程序中,发置位/复位自动EOI 命令;
(3)特殊循环方式:通过在主程序或中断服务程序中发“特殊循环方式”操作命令来指定某个
中断源的优先级为最低级,其余中断源的优先级随之循环变化;
(4)特殊屏蔽方式:可在中断服务程序中用中断屏蔽命令来屏蔽当前正在服务的中断级别时,同时就是中断服务寄存器中对应当前中断级的为自动清0,从而屏蔽了当前正在处理的本级中断;
(5)查询排序方式:用软件查询方法来响应与8259A相连的8级中断请求,CPU先用操作命令字发查询命令给8259A,再用输入指令读取IRR寄存器的状态,以识别当前有无中断请求及最高级别的中断请求。
8、18 答:多片8259级联时,主片必须工作在特殊全嵌套方式下。
假设从片工作在全嵌套方式下,先后收到了两次中断请求,而且第二次中断请求有较高的优先级,那么该从片就会两次通过INT引脚向上一级申请中断。
如果主片采用全嵌套方式,则它不会响应来自同一引脚的第二次中断请求。
而采用特殊全嵌套方式后,就会响应该请求。
8、19 答:向8259A发送“中断结束”命令,使相应的中断级在ISR中的相应位清“0”,表示该中断处理已经结束。
8259A有自动中断结束方式(AEOI)与非自动中断结束方式(EOI)。
(1)自动中断结束方式(AEOI)。
在这种方式下,系统一旦进入中断响应,8259A就在第二个中断响应周期INTA信号的后沿,自动将ISR中被响应中断级的对应位清“0”。
这就是一种最简单的中断结束处理方式,可以通过初始化命令来设定,但这种方式只能用在系统中只有一个8259A,且多个中断不会嵌套的情况。
(2)非自动中断结束方式(EOI)。
在这种工作方式下,从中断服务程序返回前,必须在程序里向8259A输出一个中断结束命令(EOI),把ISR对应位清“0”。
具体做法有一般的中断结束方式与特殊的中断结束EOI命令。
这种方式可用于系统中有多个8259A或多个中断中有嵌套的情况,但这种方式要比自动中断结束方式复杂。
而且在这种方式下,如果在程序里忘记了将ISR对应位清零,那么,8259A在一般情况下将不再响应这个中断以及比它级别低的中断请求。
OCW的EOI位写1。
如果不设置这种命8、20 答:必须发送中断结束命令,即向操作控制字
2
令,则该中断服务程序结束后,CPU将无法响应优先级比它低的中断请求以及它自身的下一次中断请求。
若初始化为自动结束方式,则不需设置这种操作。
①8、21 答:关于有前缀的指令,前缀包括段寄存器前缀(例如指令MOV AX , CS:V AR)、重
复前缀(例如指令REP MOVSB)、与LOCK 前缀。
应明确的就是,指令前缀并不就是一个独立的指令,只就是指令的一部分,所以不允许在前缀码与指令码之间响应中断,所以应在这条指令前置CLI(关中断)指令,在这条指令后置STI(开中断)指令。
②对于目的地址就是段寄存器的MOV 与POP 指令(除CS外),本条指令后不允许响应中
断,而就是还要执行一条指令结束后才能响应中断,这时可以在指令前加CLI,指令后加STI 。
需要进行中断嵌套时,由于微处理器在响应中断时已将IF 清零,所以一定要在中断处理程序中加开中断指令,才有可能进行中断嵌套。
8、22 答:设备A 在一次I/O 操作完成后在8259A 从片中断请求输入端IR5上产生中断请求,中断请求被锁存在8259A 从片IRR 中,并经IMR “屏蔽”,其结果送给优先权电路判优。
控制逻辑接收中断请求,向8259A 主片IR2引脚输出INT 信号,中断请求被锁存在8259A 主片IRR 中,并经IMR “屏蔽”,其结果送给优先权电路判优。
控制逻辑接收中断请求,向CPU 输出INT 信号。
CPU 从INTR 引脚接受8259A 主片的INT 信号,进入连续两个INTA 周期。
优先权电路设置ISR 中的对应位,在收到第一个INTA 信号后, 8259A 主片把当前申请中断的8259A 从片的ID 代码010,通过CAS0~CAS2送到相应的8259A 从片。
相应地8259A 从片在收到第二个INTA 信号时,将中断类型号N 送到数据线上。
8086CPU 获得中断类型号N 后,在N ×4与N ×4+2对应的中断向量表单元获取中断向量分别置入IP 与CS,从此进入设备A 的中断服务程序。
在中断服务程序结束前(即执行IRET 指令前),应分别向从片8259与主片8259发送EOI 中断结束命令,然后执行IRET 指令,返回断点。
8、23 答:设8258A 主片的端口地址为20H(A 0=0)与 21H(A 1=1),第一个8259A 从片的端口地址为50H(A 0=0)与 51H(A 1=1),第二个8259A 从片的端口地址为0A0H(A 0=0)与 0A1H(A 1=1),初始化程序如下:
主片:
MOV AL,00010001B;1ICW :边沿触发,级联
OUT 20H,AL
MOV AL,00010000B;2ICW :中断类型号10H~17H
OUT 21H,AL
MOV AL,01010000B;3ICW :4IR 与6IR 连有从片
OUT 21H,AL
MOV AL,00010001B;4ICW :特殊全嵌套,非缓冲,非自动中断结束
OUT 21H,AL 从片1:
MOV AL,00010001B;1ICW :边沿触发,级联
OUT 50H,AL
MOV AL,00100000B;2ICW :中断类型号20H~27H
OUT 51H,AL
MOV AL,00000100B;
3ICW :INT 引脚连主片4IR
OUT 51H,AL MOV AL,00000001B;4ICW :完全嵌套,非缓冲,非自动中断结束
OUT 51H,AL
从片二:
MOV AL,00010001B;1ICW :边沿触发,级联
OUT 0A0H,AL
MOV AL,00110000B;2ICW :中断类型号30H~37H
OUT 0A1H,AL
MOV AL,00000110B;
3ICW :INT 引脚连主片6IR
OUT 0A1H,AL MOV AL,00000001B;4ICW :完全嵌套,非缓冲,非自动中断结束
OUT 0A1H,AL
8、24 答:MOV AL, 13H
OUT 50H, AL ;初始化1ICW ,设置为边沿触发,单片工作
MOV AL, 08H
OUT 51H, AL ;2ICW ;中断类型号的高5位为00001B,即中断类型号为08H~0FH
MOV AL, 0BH
OUT 51H, AL ; 初始化4
ICW ,一般全嵌套缓冲方式,中断非自动结束 8、25 答:8259A 可通过设置操作控制字
发送中断结束命令(EOI 命令),来清除ISR 的指定位。
的值为23H,
用低位端口地址(即A0=0)进行操作,因此可编程如下:
MOV AL,23H
MOV 20H,AL 8、26 答:1)设计必要的中断源,确定它们提出的中断请求的方式。
2)编写初始化程序。
根据急迫程度的不同,规定好中断源的优先级别,以确定当几个中断源同时请求时,处理机能有一个先后响应次序。
3)当处理机响应中断后,需要把被中断程序的现场、断点保护起来,以便中断处理结束后能返回原程序。
4)中断服务程序设计。
5)恢复现场,返回原程序。
8、27 答:执行INT 8之后,(SP)=00FAH,(SS)=0300H,(IP)=0040H,(PSW)=0040H 。
由于INT8为双字节指令,所以栈顶的三个字从上到下分别就是 00A2H,0900H,0240H 。
8、28 答:可以。
但这样做存在问题。
IRET 指令执行时将出栈IP,CS 与PSW 的值,而RETF 指令只出栈IP,CS 的值,因而若中断服务程序中改变了标志位,用RETF 指令返回在主程序中将无法恢复标志位的值。
尤其就是在中断服务程序中关中断后(IF=0),用RETF 指令将无法重新开中断,从而导致中断服务结束后CPU 不能再响应其她可屏蔽中断。
8、29 答:根据题目,主片的ICW1为00010001B,边沿触发、级联、写ICW4,主片的ICW2为20H,ICW3为0CH(因为从片INT 接主片的IR3与IR4),ICW4为00010001B(特殊全嵌套、非缓冲方式、中断正常结束、8086CPU);从片一的ICW1为00010001B,ICW2为30H,ICW3为03H,ICW4为00000001B(普通全嵌套、非缓冲、中断正常结束、8086CPU);从片二的ICW1为11H,ICW2为40H,ICW3为04H,ICW4为01H 。
根据译码逻辑,主片的端口地址为040H 、042H,从片一的端口地址为044H 、046H,从片二的端口地址为048H 、04AH 。
初始化编程为:
;主片初始化编程
MOV DX,040H
MOV AL,11H ;ICW1
OUT DX,AL
MOV DX,042H
MOV AL,20H ;ICW2
OUT DX,AL
MOV AL,0CH ;ICW3
OUT DX,AL
MOV AL,11H ;ICW4
OUT DX,AL
;从片一初始化编程
MOV DX,044H
MOV AL,11H ;ICW1
OUT DX,AL
MOV DX,046H
MOV AL,30H ;ICW2
OUT DX,AL
MOV AL,03H ;ICW3
OUT DX,AL
MOV AL,01H ;ICW4
OUT DX,AL
;从片二初始化编程
MOV DX,048H
MOV AL,11H ;ICW1
OUT DX,AL
MOV DX,04AH
MOV AL,40H ;ICW2
OUT DX,AL
MOV AL,04H ;ICW3
OUT DX,AL
MOV AL,01H ;ICW4
OUT DX,AL。