第七章
2.微机的中断处理过程有哪几步?中断过程和调用子程序过程有何异同?
答:一个中断过程应包含:中断请求、中断排队、中断响应、中断服务和中断返回。
中断过程和调用子程序过程相同之处是:都是在主程序中调用子程序,之后返回主程序。 不同的是:进入子程序的时间和方法不同。调用子程序时,指令安排在主程序中,主程序主动,子程序的入口地址通过计算就知道。中断过程对于主程序是被动的,主程序中没有预先调用指令,中断是随机的,中断处理子程序的入口地址(中断向量)要由中断类型码获得。
4.中断服务程序一般进行哪些例行操作? 答:中断服务程序一般由6部分组成:
(1)保护现场 CPU响应中断时自动完成断点的保护,其余的寄存器则由程序员视使用情况决定,中断服务程序中使用到的某些寄存器可通过PUSH指令送入堆栈保护。
(2)开中断 CPU响应中断时,自动执行关中断操作。要实现中断嵌套,必须在中断服务程序中开中断。
(3)中断处理 对中断源作相应的处理,如输入/输出数据、掉电紧急保护等,这是中断服务程序的核心。
(4)关中断 若中断服务程序设置了开中断,则此时应关中断,以保证下一步恢复现场的操作不被打断。
(5)恢复现场 按后进先出的原则,通过执行POP指令将送入堆栈保护的寄存器弹出,注意PUSH指令和POP指令应成对使用。
(6)中断返回 中断返回将从堆栈中弹出断点,从而返回到主程序。
5.实现中断嵌套的条件是什么?优先权高的中断请求一定能打断正在进行的优先权低的中断服务程序吗?
答:中断嵌套是正在中断服务处理过程中,出现优先权更高的中断请求,则再次响应新的中断请求,转去为优先权更高的中断服务,处理完后再回到原来的中断服务中。因此,要实现中断嵌套,其必要条件是新的中断请求的优先权更高。但是,并不是优先权高的中断请求一定能打断优先权低的中断服务。如果CPU在中断的处理过程时处于禁止中断状态,它是不响应新的中断请求的。
7.简述8086/8088的可屏蔽中断和非屏蔽中断的区别。
答:非屏蔽中断请求由NMI引脚送入,它不能被屏蔽,即不受标志IF状态的影响,在当前指令执行完后,CPU就响应。非屏蔽中断类型码固定为2。
可屏蔽中断请求由INTR引脚送入,CPU是否响应,取决于标志寄存器中的中断允许标志IF的状态。若IF=0,则表示中断禁止,CPU不响应;若IF=1,则表示中断允许,CPU可以响应,从而进入中断响应总线周期,CPU发出中断响应信号INTA,并从数据总线获取中断源的中断类型码,进入中断服务程序。
12.8259A当前中断服务寄存器ISR的内容代表什么?在中断嵌套和单个中断情况下,ISR的内容有什么不同?
答:中断服务寄存器ISR记录了正被CPU响应的中断。ISR是8位寄存器,8个位分别对应8个中断源IRi,若某个中断源的中断请求被CPU响应,则对应位置1。单个中断被响应时,ISR中只有一个位为1;中断嵌套时ISR中有两个以上的位为1,表明一个中断未处理结束,又转入更高优先权的中断处理中。所以ISR表示当前有哪些正在响应的中断存在。
16.设目前系统的最高优先权为IR5,若执行OCW2命令,且命令中EOI=0,R=1,SL=1,L2L1L0=011。请指出OCW2命令执行后,8259A的优先权顺序。 解:因为OCW2命令中EOI=0,R=1,SL=1,因此该命令是设置优先权特殊循环,由L2L1L0=011确定最低优先权为IR3,该命令执行后,8259A的8个中断源的优先权从高至低次序为IR4、IR5、IR6、IR7、IR0、IR1、IR2、IR3。
第八章
例8-10 8253的计数器2用作分频器,将频率1.19MHz的输入脉冲转变成频率为500Hz的脉冲信号。8253的端口地址为70H ~ 73H。试编写初始化程序段。
解:依题意,计算分频系数N=1.19*106/500=2380=094CH,则其初始化程序段为:
MOV AL,0B4H OUT 73H,AL MOV AL,4CH OUT 72H,AL MOV AL,09H OUT 72H,AL
6.以8255A作为接口,采集8个开关状态,然后通过8个发光二极管显示出来(开关闭合,对应发光二极管亮;开关打开,对应发光二极管暗)。请画出电路连接图并编程实现。 解:电路连接图如图示,从图中连接知,该8255A的端口地址为80H ~ 83H。
程序段如下:
MOV AL,82H OUT 83H,AL LP: IN AL,81H NOP
OUT 80H,AL JMP LP