查询方式当外设数据未准备好时,CPU需要不断查询外设是否准备好,效率低。
中断:
CPU在执行程序的过程中,由于某种外部或内部事件的作用,使CPU停止当前正在执行的程序转去为该事件服务,待事件服务结束后,又能自动返回到被中止的程序继续执行。
主程序: 被中断的原程序
中断服务子程序:中断处理的程序
中断源:引发中断的信息源
中断分类:
外部中断(硬件中断):
由外部事件引发的中断,即由CPU外部设备发出,并由CPU中断请求信号引脚输入所引发的中断。
8086CPU有2个引脚INTR和NMI可以接受外部的中断请求信号。
INTR接受的中断信号为可屏蔽硬件中断
NMI接受的中断信号为非屏蔽硬件中断。
内部中断(软件中断源):由CPU硬件故障或程序执行中的事件引发的中断,可分为软件中断和异常。
软件中断:执行有INT n执行而引发的中断。可分为BIOS中断、DOS中断。
中断类型码:
每个不同的中断有一个中断号n,取值0~255,256个中断。
21H:DOS中断
10H,16H:BIOS中断
2型中断:非屏蔽硬件中断,输入微处理器的NMI引脚的中断请求信号引发的中断,是不可以被禁止的。
可屏蔽中断的中断类型码由8259A给出。(INTA给8259A的第二个负脉冲时发送中断类型码)
软件中断的中断类型码由中断指令给出。
中断向量:
实模式下,中断向量指中断服务子程序的入口地址。
每个中断号所对应的中断向量占4字节。
前两字节是中断服务子程序入口的偏移地址,
后两字节是中断服务子程序的代码段段基址。
中断向量表:
实模式下,系统存储器地址空间中,最低的1KB空间,即00000H~003FFH单元,依次存放着256个中断号所对应的中断向量,每个中断的中断向量4字节(1024个字节),存放着1024字节中断向量的存储区就构成了一张中断向量表。
记:0820,偏低高段低高
注意:08H*4=20H!=32H,所以08型中断向量存放在20H~23H。
20H,21H存放08型中断服务子程序偏移地址,22H23H存放08型中断服务子程序入口的段基址。
已知系统RAM20H~23H单元的内容依次为22H,33H,44H,55H
则08型中断服务子程序入口的物理地址=5544H*16+3322H=58762H
中断向量表的初始化:
由BIOS设计的中断服务子程序,中断向量在加电时由BIOS负责写入中断向量表
由DOS设计的中断服务子程序,中断向量在启动DOS时,由DOS负责写入中断向量表
用户程序开发的中断服务子程序,由用户程序写入中断向量
例:设n型中断服务子程序的名字是SERVICE,将SERVICE的入口地址写入对应的中断向量表
方法一:自己编写程序填写中断向量(易错!!!!)
方法二:
记:35读ALXESBX,25写PUSHDSAALXDSDX
DOS35H功能调用用于读取中断向量,DOS25H功能用于写入中断向量。
35H:读取中断向量
AH=35H,AL=中断类型码
ES:中断向量对应中断子程序的段基址
BX:中断向量对应中断子程序的偏移地址
21H:写入中断向量
AH=25H,AL=中断类型码(中断号)
DS:中断服务子程序所在代码段的段基址
DX:中断服务子程序入口的偏移地址
易错:MOV AX,SEG SERVICE
MOV DS,AX