搜索
写经验 领红包
 > 地理

对一个中断程序比较详细的说明是(简述一个中断过程)

8086的中断由中断控制器芯片8259A控制,其内部结构如下图:

图1

CPU与8259的连接如下图:

图2

要特别注意,8259由引脚INT向CPU发出中断请求,CPU则通过INTA引脚响应这个请求。

下面是一个中断程序,这个程序是显示10遍字符串‘A 8259A Interrupt’:

图3

上图是定义字符串

图4

上图是保存原中断向量表中的8号中断源的地址,调用了INT 21H的35H号功能。

图5

上图是将自己编写的中断程序new08的入口地址放入中断向量表类型8的存储单元中,调用了INT 21H的25H号功能。

图6

由于上图的中断向量表是系统设定的,只能临时更改,所以要把类型8中断的向量地址保存下来。

图7

注意图1和图2中8259有8个中断采集引脚IR0-IR8,但在某个具体的程序中,不一定要全部用到,所以可以通过中断屏蔽寄存器IMR设定哪些引脚生效。上图是保证IR0引脚有效,用于接收定时器8253的中断请求。

图8

主程序运行到这里以后,就在这里循环等待中断程序的中断请求。

从上图开始进入中断程序。

注意counter是中断程序和主程序进行交流的变量。

上面两个图是从字符串‘A 8259A Interrupt’逐个取出字符,并调用int10h进行显示,其中的BX表示字符显示的位置和颜色,AH是int10h的功能号。

中断程序每调用一次,就显示一次字符串,每次运行完以后都要恢复图3中保存的原中断向量表中的8号中断源的地址。

最后要恢复图4中保存的原中断类型8在向量表中的地址和图7中保存的原中断屏蔽寄存器IMR中的内容。

上面程序这个编程思路可以概括如下:

1:开始编写程序的时候,我们要有图2的大概印象,即8259和8086是通过中断引脚INT和INTR连接的,我们编写的这个程序,是要响应8259通过INT引脚向CPU发出的中断请求的,这个中断请求可以是一个5V的高电平。

2:8259每隔一段时间(比如1秒钟)才发出一次请求。

3:8086响应一次中断请求就执行一次中断程序new08。

4:由于8259A1秒钟才发出一次请求,而CPU执行指令的时间则非常快(纳秒级),那么,CPU多余的时间怎么办呢?因此,主程序中必须有一个循环等待指定(图8),也就是说,当CPU响应一次中断即执行完一次中断程序以后,多余的时间就执行循环指令,等待下一次中断请求的到来。

5:必须把主程序和中断程序区分开来,主程序肯定会被CPU执行,中断程序则只有当INT引脚出现8259的中断请求以后才会被执行。

免责声明:本站部份内容由优秀作者和原创用户编辑投稿,本站仅提供存储服务,不拥有所有权,不承担法律责任。若涉嫌侵权/违法的,请与我联系,一经查实立刻删除内容。本文内容由快快网络小德创作整理编辑!