26
断NMI和可屏蔽中断INTR。
软件中断是CPU根据某条指令或者对标志寄存器的某个标志位的设置而产生的,也称为内部中断。通常有除法出错中断、INTO溢出中断、INT n中断、断点中断和单步中断等。
两者的主要区别:硬件中断由外部硬件产生,而软件中断与外部电路无关。
7.4 中断优先级的排队有哪些方法?采用软件优先级排队和硬件优先级排队各有什么特点? 【解答】软件优先级排队:各中断源的优先权由软件安排。优点是电路比较简单,可以直接修改软件查询顺序来修改中断优先权,不必更改硬件。缺点是当中断源个数较多时,有逐位检测查询到转入相应的中断服务程序所耗费的时间较长,中断响应速度慢,服务效率低。
硬件优先级排队:指利用专门的硬件电路或中断控制器对系统中各中断源的优先权进行安排。这种方法中断响应速度快,服务效率高,但需要专门的硬件电路。
7.5 8086的中断分哪两大类?各自有什么特点?中断矢量和中断矢量表的含义是什么?8086一共可处理多少级中断?
【解答】8086的中断分为外部中断和内部中断两种:外部中断由外部硬件产生,由CPU外部中断请求信号触发,分为非屏蔽中断NMI和可屏蔽中断INTR。内部中断是为了处理程序运行过程中发生的一些意外情况或调试程序而提供的中断。
8086的中断系统能够处理256个不同的中断,每一个中断安排一个编号,范围为0~255,称为中断类型。每种中断类型对应的中断服务程序的入口地址称为中断矢量(或中断向量)。把系统中所有的中断矢量按中断类型从小到大的顺序放到存储器的特定区域,该区域称为中断矢量表。每个中断矢量在中断矢量表中占用4字节,CPU响应中断后通过将中断类型×4得到中断矢量在中断矢量表中的首地址。
8086CPU允许中断嵌套,具体能嵌套多少级中断,受堆栈深度的限制。
7.6 简述8086的中断类型,非屏蔽中断和可屏蔽中断有哪些不同之处?CPU通过什么响应条件来处理这两种不同的中断?
【解答】8086的中断系统能够处理256个不同的中断源,并为每一个中断安排一个编号,范围为0~255,称为中断类型。
硬件中断分为非屏蔽中断和可屏蔽中断,非屏蔽中断不受中断允许标志位IF的影响,在IF=0关中断的情况下,CPU也能在当前指令执行完毕后就响应NMI上的中断请求。可屏蔽中断:CPU将根据中断允许标志位IF的状态决定是否响应。如果IF=0,表示CPU关中断;如果IF=1,表示CPU开中断,CPU执行完现行指令后会转入中断响应周期。
7.7 已知8086系统中采用单片8259A来控制中断,中断类型码为20H,中断源请求线与8259A的IR4相连,计算中断向量表的入口地址。如果中断服务程序入口地址为2A310H,则对应该中断源的中断向量表的内容是什么?
【解答】偏移地址“中断类型×4”为中断向量在中断向量表中的首地址,即EA=20H×4=80H,因为在8086系统中规定存储空间00000H~003FFH(共1KB)用来存放中断向量表,则20H型中断的中断向量在中断向量表中的入口地址为00000H+80H=00080H。中断服务程序入口地址为2A310H,则对应该中断源的中断向量表的内容是任何能转换成物理地址2A310H的逻辑地址,设段地址为2000H,则偏移地址为A310H,则该中断源在中断向量表的内容是:(00080H)=2000H,(00081H)= A310H。
7.8 已知对应于中断类型码为18H的中断服务程序存放在0020H:6314H开始的内存区域中,求对应于18H类型码的中断向量存放位置和内容。
27
在编写程序时,为什么通常总要用STI和CLI中断指令来设置中断允许标志?8259A的中断屏蔽寄存器IMR和中断允许标志IF有什么区别?
【解答】偏移地址EA=18H×4=60H,18H中断向量在中断向量表中的入口地址为00000H+60H=00060H。中断服务程序存放在0020H:6314H开始的内存区域中,所以(00060H)=0020H,(00061H)= 6314H。
IF是8086微处理器内部标志寄存器Flags的中断允许标志位。若IF=1,则CPU可以接受中断请求;若IF=0,8086就不接受外部可屏蔽中断请求INTR引线上的请求信号。在编写程序时,用STI指令使中断允许标志位IF=1,目的是使CPU能够接受中断请求,或实现中断嵌套。而用CLI指令使中断允许标志位IF=0,则可以关中断,使CPU拒绝接受外部中断请求信号。
如果8259A的中断屏蔽寄存器IMR中的某位为1,就把这一位对应的中断请求输入信号IR屏蔽掉,无法被8259A处理,也无法向8086处理器产生INTR请求。
7.9 8259A对中断优先权的管理和对中断结束的管理有几种处理的方式?各自应用在什么场合? 【解答】8259A对中断优先权的管理可分为以下4种情况: (1)完全嵌套方式:是8259A最常用的工作方式。
(2)自动循环方式:一般用在系统中多个中断源优先级相同的场合。
(3)中断屏蔽方式:这种方式能在中断服务程序执行期间动态地改变系统的优先结构。 (4)特殊完全嵌套方式:一般用在8259A级联系统中。 8259A结束中断处理的方式有:
(1)一般EOI方式:只有在当前结束的中断总是尚未处理完的级别最高的中断时,才能使用这种结束方式。
(2)指定EOI方式:适合于在任何情况下使用。
(3)自动EOI方式:只有在一些以预定速率发生中断,且不会发生同级中断互相打断或低级中断打断高级中断的情况下,才使用自动EOI方式。
7.10 8259A仅有两个端口地址,它们如何识别ICW命令和OCW命令? 【解答】
ICW1特征是A0=0,并且控制字的D4=1。 ICW2特征是A0=1。
当ICW1中的SNGL位为0时工作于级联方式,此时需要写ICW3。 ICW4是在ICW1的IC4=1时才使用。 OCW1特征是A0=1。
OCW2特征是A0=0且D4D3=00。 OCW3特征是A0=0且D4D3=01。
7.11 在两片8259A级联的中断系统中,主片的IR6接从片的中断请求输出,请写出初始化主片、从片时,相应的ICW3的格式。
【解答】主片ICW3的格式为:
A0 D7 D6 D5 D4 D3 D2 D1 D0 1
0 1 0 0 0 0 0 0 从片ICW3的格式为:
28
A0 D7 D6 D5 D4 D3 D2 D1 D0 1 0 0 0 0 0 1 1 0 7.12 已知8086系统采用单片8259A,中断请求信号使用电平触发方式,完全嵌套中断优先级,数据总线无缓冲,采用自动中断结束方式,中断类型码为20H~27H,8259A的端口地址为B0H和B1H,试编程对8259A设定初始化命令字。
【解答】对8259A的初始化编程如下:
MOV AL, 1BH ; 写入ICW1,设定电平触发,单片
OUT B0H,AL
MOV AL, 20H ; 写入ICW2,设定IRQ0的中断类型码为20H OUT B1H, AL?
MOV AL, 07H ;写入ICW4,设定完全嵌套方式,普通EOI方式 OUT B1H, AL
习题8
8.1 8237A DMA控制器有哪两种工作状态?其工作特点如何?
【解答】一种是系统总线的主控者,这是它工作的主方式。在取代CPU控制DMA传送时,它应提供存储器的地址和必要的读写控制信号,数据是在I/O设备与存储器之间通过数据总线直接传递;另一种是在成为主控者之前,必须由CPU对它编程以确定通道的选择、数据传送的模式、存储器区域首地址、传送总字节数等。在DMA传送之后,也有可能由CPU读取DMA控制器的状态。这时8237A如同一般I/O端口设备一样,是系统总线的从设备,这是8237A工作的从方式。
8.2 8237A进行DMA数据传送时有哪几种传送方式?
【解答】单字节传送方式、数据块传送方式、请求传送方式、级联方式。
8.3 若8237A的端口基地址为000H,要求通道0和通道1工作在单字节读传输方式,地址减1变化,无自动预置功能。通道2和通道3工作在数据块传输方式,地址加1变化,有自动预置功能。8237A的DACK为高电平有效,DREQ为低电平有效,用固定优先级方式启动8237A工作,试编写8237A的初始化程序。
【解答】初始化程序如下:
DMA EQU 000H ;8237A的基地址为00H ;输出主清除命令
OUT DMA+0DH,AL ;发总清命令
;写入方式字:单字节读传输,地址减1变化,无自动预置功能,选择通道0 MOV AL,01101000B ;方式字 OUT DMA+0BH,AL ;写入方式字
;写入方式字:单字节读传输,地址减1变化,无自动预置功能,选择通道1 MOV AL,01101001B ;方式字 OUT DMA+0BH,AL ;写入方式字
;写入方式字:数据块传输方式,地址加1变化,有自动预置功能,选择通道2 MOV AL,10010010B ;方式字 OUT DMA+0BH,AL ;写入方式字
;写入方式字:数据块传输方式,地址加1变化,有自动预置功能,选择通道3 MOV AL,10010010B ;方式字 OUT DMA+0BH,AL ;写入方式字
;写入命令字:DACK为高电平有效,DREQ为低电平有效,用固定优先级方式 MOV AL,11000000 B ;命令字 OUT DMA+08H,AL ;写入8237A
29
8.4 试分析8253的6种工作方式的特点和功能。各方式下的时钟信号CLK和门控信号GATE分别起什么作用?
【解答】
方式0:计数结束,产生中断 方式1:可重复触发的单稳态触发器 方式2:分频器 方式3:方波发生器
方式4:软件触发的选通信号发生器 方式5:硬件触发的选通信号发生器
时钟信号CLK的作用:在8253进行定时或计数工作时,每输入1个时钟脉冲信号CLK,便使计数值减1。
GATE信号的控制作用如下: 工作方式 方式0 低电平 禁止计数 下降沿 暂停计数 不影响 GATE引脚输入状态所起的作用 上升沿 置入初值后WR上升沿开始计数,由GATE的上升沿继续计数 置入初值后,GATE的上升沿开始计数,或重新开始计数。 置入初值后,WR上升沿开始计数,方式2 禁止计数 停止计数 由GATE的上升沿重新开始计数 置入初值后,WR上升沿开始计数,由GATE的上升沿重新开始计数 置入初值后,WR上升沿开始计数,由GATE的上升沿重新开始计数 置入初值后,GATE的上升沿开始方式5 不影响 不影响 计数,或重新开始计数。 不影响计数 允许计数 高电平 允许计数 不影响计数 OUT引脚 输出状态 计数过程中输出低电平。计数至0输出高电平 输出宽度为n个CLK的低电平(单次) 输出宽度为n个CLK宽度为1个CLK的负脉冲 输出宽度为n个CLK的方波(重复波形) 计数至0,输出宽度为1个CLK的负脉冲(单次) 计数至0,输出宽度为1个CLK的负脉冲(单次) 方式1 不影响 方式3 禁止计数 方式4 禁止计数 停止计数 停止计数 允许计数 允许计数 8.5 设8253芯片的计数器0、计数器1和控制口地址分别为04B0H、04B2H、04B6H。定义计数器0工作在方式2,CLK0为5MHz,要求输出OUT0为1KHz方波;定义计数器1用OUT0作计数脉冲,计数值为1000,计数器减到0时向CPU发出中断请求,CPU响应这一中断请求后继续写入计数值1000,开始重新计数,保持每一秒钟向CPU发出一次中断请求。试编写出对8253的初始化程序,并画出硬件连接图。
【解答】由题目知计数器1工作在方式0下,参考程序段如下: ;计数器0初始化
MOV AL,34H MOV DX,04B6H OUT DX,AL
;计数器0赋初值
30
MOV MOV OUT MOV OUT
AX,5000 DX,04B0H DX,AL AL,AH DX,AL
;计数器1初始化
MOV AL,72H MOV DX,04B6H OUT DX,AL
;计数器1赋初值
MOV MOV OUT MOV OUT
AX,1000 DX,04B2H DX,AL AL,AH DX,AL
连接图如下所示:
三八译码器A7A6A5S1D1S2S3D8A2A1D7-D0CSA1A0CLK0OUT0CLK1OUT15MHzINTRD7-D0GATE0GATE1+5V 图8-1 硬件连接图
8.6 将8253定时器0设置为方式3(方波发生器),定时器1设置为方式2(分频器)。要求定时器0的输出脉冲作为定时器l的时钟输入,CLK0连接总线时钟4.77MHz,定时器1输出OUT1约为40Hz,试编写实现上述功能要求的程序。
【解答】参考程序段如下: ;0号计数器初始化
MOV AL,16H MOV DX,PORTC OUT DX,AL
;0号计数器赋初值
MOV AL,1200 MOV DX,PORT0 OUT DX,AL
;1号计数器初始化
MOV AL,54H MOV DX,PORTC OUT DX,AL
;1号计数器赋初值
MOV AL,100