发布网友 发布时间:2022-04-27 08:26
共2个回答
热心网友 时间:2022-04-05 15:09
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-0x3FF F1-FF 未使用 0x218-0x3C3 86-F0 BASIC程序运行时提供给BASIC解释程序作用 0x200-0x217 80-85 为BASIC保留 0x1E0-0x1FF 78-7F 未使用 0x1DC-0x1DF 77 硬件中断15 0x1D8-0x1DB 76 硬件中断14 0x1D4-0x1D7 75 硬件中断13 0x1D0-0x1D3 74 硬件中断12 0x1CC-0x1CF 73 硬件中断11 0x1C8-0x1CB 72 硬件中断10 0x1C4-0x1C7 71 硬件中断9 0x1C0-0x1C3 70 硬件中断 0x1A0-0x1BF 68-6F 未使用 0x180-0x19F 60-67 为用户程序保留的单元 0x128-0x17F 4A-5F 保留 0x124-0x127 49 指向键盘增强服务变换表 0x120-0x123 48 PC机使用,用于把PC机的键盘代码变换为标准的键盘代码 0x11C-0x11F 47 保留 DOS中断向量 0x118-0x11B 46 第二硬盘参数块 0x114-0x117 45 保留 0x110-0x113 44 PC机使用,用于指向低分辩率图形字符参数表 0x108-0x10F 42-43 未使用 0x104-0x107 41 硬盘参数块 0x0C0-0x0CB 34-40 未使用 0x0CC-0x0CF 33 鼠标中断 0x0C0-0x0CB 30-32 未使用 0x0BC-0x0BF 2F 多路服务中断 0x0B8-0x0BB 2E 基本SHELL程序装入 0x0AC-0x0B7 2B-2D 未使用 0x0A8-0x0AB 2A Microsoft网络接口 0x0A4-0x0A7 29 快速写字符 0x0A0-0x0A3 28 DOS安全使用 0x09C-0x09F 27 终止并驻留程序 0x098-0x09B 26 绝对磁盘写功能 0x094-0x097 25 绝对磁盘读功能 0x090-0x093 24 严重错误处理(用户不能直接调用) 0x08C-0x08F 23 Ctrl+Break处理地址(用户不能直接调用) 0x088-0x08B 22 程序中止时DOS返回地址(用户不能直接调用) 0x084-0x087 21 DOS系统功能调用 0x080-0x083 20 DOS中断返回 数据表指针 0x07C-0x07F 1F 图形字符扩展码 0x078-0x07B 1E 软盘参数块 0x074-0x077 1D 视频参数块 提供给用户的中断 0x070-0x073 1C 定时器控制的软中断 0x06C-0x06F 1B Ctrl+Break控制的软中断 BIOS中断 0x068-0x06B 1A 时钟管理 0x064-0x067 19 引导装入程序--系统自举 0x060-0x063 18 BASIC入口代码--ROMBASIC入口代码 0x05C-0x05F 17 打印机输出 0x058-0x05B 16 键盘I/O 0x054-0x057 15 盒式磁带I/O 0x050-0x053 14 RS-232串行通讯口I/O 0x04C-0x04F 13 磁盘I/O 0x048-0x04B 12 测定存储器容量 0x044-0x047 11 设备检验 0x040-0x043 10 屏幕显示I/O 8259中断向量 0x03C-0x03F F LPT2控制器中断--并行打印机(IRQ7) 0x038-0x03B E 磁盘控制器中断--软磁盘(IRQ6) 0x034-0x037 D LPT2控制器中断--硬磁盘(并行口)(IRQ5) 0x030-0x033 C 异步通信(primary)--串行通信接口1(IRQ4) 0x02C-0x02F B 异步通信(secondary)--串行通信接口2(IRQ3) 0x028-0x02B A 彩色/图形(IRQ2) 0x024-0x027 9 键盘(IRQ1) 0x020-0x023 8 定时器(IRQ0) 8088中断向量 0x01C-0x01F 7 保留 0x018-0x01B 6 保留 0x014-0x017 5 打印屏幕 0x010-0x013 4 溢出 0x00C-0x00F 3 断点指令 0x008-0x00B 2 非屏蔽中断 0x004-0x007 1 单步(用于DEBUG) 0x000-0x003 0 除以零 中断向量地址和中断向量
中断向量:中断服务程序的入口地址
中断向量地址:内存中存放中断服务程序入口地址的地址
热心网友 时间:2022-04-05 16:27
是指中断服务程序入口地址的偏移量与段基值,一个中断向量占据4字节空间。中断向量表是8088系统内存中最低端1k字节空间,它的作用就是按照中断类型号从小到大的顺序存储对应的中断向量,总共存储256个中断向量。在中断响应过程中,cpu通过从接口电路获取的中断类型号(中断向量号)计算对应中断向量在表中的位置,并从中断向量表中获取中断向量,将程序流程转向中断服务程序的入口地址。