标题：中断向量
中断
中断是指在计算机执行程序的过程中，当出现异常情况或者特殊请求时，计算机停止现行的程序的运行，转而对这些异常处理或者特殊请求的处理，处理结束后再返回到现行程序的中断处，继续执行原程序。
（1）存放中断服务程序的入口地址
在PC/AT机中，中断向量是指中断服务程序的入口地址，每个中断向量分配4个连续的字节单元，两个高字节单元存放入口的段地址CS，两个低字节单元存放入口的段内偏移量IP。在PC/AT中，规定内存储器的最低1 KB用来存放中断向量(共256个)，称这一片内存区为中断向量表，地址范围是0~3FFH，如图所示。 
在PC/AT中由硬件产生的中断标识码被称为中断类型号(当然，中断类型号还有其他的产生方法，如指令中直接给出、CPU自动形成等)，即在中断响应期间8259A产生的是当前请求中断的最高优先级的中断源的中断类型号。中断类型号和中断向量之间有下面的关系： 
中断类型号×4=存放中断子程序首地址的存储区首地址=中断向量地址
有了存放中断向量的首地址，从该地址开始的4个存储单元中取出的就是中断服务程序的入口。
（2）跳转到中断服务程序的入口地址
在AVR或ARM微处理器中，中断向量的大小也是4个字节，但其中存放的不是中断程服务程序的入口地址，而是可执行的代码。当响应中断时，硬件自动执行相应中断向量处的跳转代码，然后跳转到具体的中断服务程序的入口地址。
（3）中断向量表
CPU是根据中断号获取中断向量值，即对应中断服务程序的入口地址值。因此为了让CPU由中断号查找到对应的中断向量，就需要在内存中建立一张查询表，即中断向量表(在32位保护模式下该表称为中断描述符表)。80x86微机支持256个中断，对应每个中断需要安排一个中断服务程序。在 80x86实模式运行方式下，每个中断向量由4字节组成。这4字节指明了一个中断服务程序的段值和段内偏移值。因此整个向量表的长度为1KB。当 80x86微机启动时，ROM BIOS中的程序会在物理内存开始地址0x0000:0x0000处初始化并设置中断向量表，而各中断的默认中断服务程序则在BIOS中给出。由于中断向量表中的向量是按中断号顺序排列，因此给定一个中断号N，那么它对应的中断向量在内存中的位置就是0x0000:N×4，即对应的中断服务程序入口地址保存在物理内存0x0000:N×4位置处。
在BIOS执行初始化操作时，它设置了两个8259A芯片支持的16个硬件中断向量和BIOS提供的中断号为0x10～0x1f的中断调用功能向量等。对于实际没有使用的向量则填入临时的哑中断服务程序的地址。以后在系统引导加载操作系统时会根据实际需要修改某些中断向量的值。例如，对于DOS操作系统，它会重新设置中断0x20～0x2f的中断向量值。而对于Linux系统，除了在刚开始加载内核时需要用到BIOS提供的显示和磁盘读操作中断功能，在内核正常运行之前则会在setup.s程序中重新初始化8259A芯片并且在head.s程序中重新设置一张中断向量表(中断描述符表)。完全抛弃了BIOS所提供的中断服务功能。
当Intel CPU运行在32位保护模式下时，需要使用中断描述符表(Interrupt Descriptor Table，IDT)来管理中断或异常。IDT是Intel 8086～80186 CPU中使用的中断向量表的直接替代物。其作用也类似于中断向量表，只是其中每个中断描述符项中除了含有中断服务程序地址以外，还包含有关特权级和描述符类别等信息。Linux操作系统工作于80x86的保护模式下，因此它使用中断描述符表来设置和保存各中断的"向量"信息。下面是80X86中断向量表各个地址表示的中断用途。
内存地址（十六进制）对应向量号（十六进制）中断用途BASIC中断向量0x3C4 - 0x3FFF1-FF未使用0x218 - 0x3C386-F0BASIC程序运行时提供给BASIC解释程序作用0x200 - 0x21780-85为BASIC保留0x1E0 - 0x1FF78-7F未使用0x1DC - 0x1DF77硬件中断150x1D8 - 0x1DB76硬件中断140x1D4 - 0x1D775硬件中断130x1D0 - 0x1D374硬件中断120x1CC - 0x1CF73硬件中断110x1C8 - 0x1CB72硬件中断100x1C4 - 0x1C771硬件中断90x1C0 - 0x1C370硬件中断0x1A0 - 0x1BF68-6F未使用0x180 - 0x19F60-67为用户程序保留的单元0x128 - 0x17F4A-5F保留0x124 - 0x12749指向键盘增强服务变换表0x120 - 0x12348PC机使用，用于把PC机的键盘代码变换为标准的键盘代码0x11C - 0x11F47保留DOS中断向量0x118 - 0x11B46第二硬盘参数块0x114 - 0x11745保留0x110 - 0x11344PC机使用，用于指向低分辩率图形字符参数表0x108 - 0x10F42-43未使用0x104 - 0x10741硬盘参数块0x0C0 - 0x0CB34-40未使用0x0CC - 0x0CF33鼠标中断0x0C0 - 0x0CB30-32未使用0x0BC - 0x0BF2F多路服务中断0x0B8 - 0x0BB2E基本SHELL程序装入0x0AC - 0x0B72B-2D未使用0x0A8 - 0x0AB2AMicrosoft 网络接口0x0A4 - 0x0A729快速写字符0x0A0 - 0x0A328DOS安全使用0x09C - 0x09F27终止并驻留程序0x098 - 0x09B26绝对磁盘写功能0x094 - 0x09725绝对磁盘读功能0x090 - 0x09324严重错误处理（用户不能直接调用）0x08C - 0x08F23Ctrl+Break 处理地址（用户不能直接调用）0x088 - 0x08B22程序中止时DOS返回地址（用户不能直接调用）0x084 - 0x08721DOS系统功能调用0x080 - 0x08320DOS中断返回数据表指针0x07C - 0x07F1F图形字符扩展码0x078 - 0x07B1E软盘参数块0x074 - 0x0771D视频参数块提供给用户的中断0x070 - 0x0731C定时器控制的软中断0x06C - 0x06F1BCtrl + Break控制的软中断BIOS中断0x068 - 0x06B1A时钟管理0x064 - 0x06719引导装入程序--系统自举0x060 - 0x06318BASIC入口代码--ROM BASIC入口代码0x05C - 0x05F17打印机输出0x058 - 0x05B16键盘I/O0x054 - 0x05715盒式磁带I/O0x050 - 0x05314RS-232串行通讯口I/O0x04C - 0x04F13磁盘I/O0x048 - 0x04B12测定存储器容量0x044 - 0x04711设备检验0x040 - 0x04310屏幕显示I/O8259中断向量0x03C - 0x03FFLPT2控制器中断--并行打印机(IRQ7)0x038 - 0x03BE磁盘控制器中断--软磁盘(IRQ6)0x034 - 0x037DLPT2控制器中断--硬磁盘（并行口）(IRQ5)0x030 - 0x033C异步通信(primary)--串行通信接口1(IRQ4)0x02C - 0x02FB异步通信(secondary)--串行通信接口2(IRQ3)0x028 - 0x02BA彩色/图形(IRQ2)0x024 - 0x0279键盘(IRQ1)0x020 - 0x0238定时器(IRQ0)8088中断向量0x01C - 0x01F7保留0x018 - 0x01B6保留0x014 - 0x0175打印屏幕0x010 - 0x0134溢出0x00C - 0x00F3断点指令0x008 - 0x00B2非屏蔽中断0x004 - 0x0071单步(用于DEBUG)0x000 - 0x0030除以零中断向量地址和中断向量
中断向量：中断服务程序的入口地址
中断向量地址：内存中存放中断服务程序入口地址的地址