我想问个关于中断向量表的问题

2024-12-14 03:55:46
推荐回答(5个)
回答1:

中断向量表,和 DOS 等操作系统无关,只是和 CPU 有关。

80x86 CPU 是 Intel 公司设计的。
它支持这样一种指令:INT xxH, 这些指令,称为中断调用指令。
当 CPU 执行中断调用指令的时候,CPU 会到内存 00000H ~ 003FFH 中去找对应的入口地址。
这些,都是 Intel 公司设计好的。

我们(或微软公司)编写程序的时候,可以编写 256 个子程序。
这些子程序,可以放在 1M 的内存中的其它地址,
但是要把它们的入口地址,写入 00000H ~ 003FFH 中,便于 CPU 去找。
子程序,也可以用 CALL 指令调用,但是不如用 INT xxH 快捷、规范。

早年,曾有人用 8086 制作控制板,完全不用 DOS,但是,其中也有中断向量表,因为这是 80x86 CPU 特有的方法。

回答2:

8086中断向量表,就是实模式下的中断向量表,dos是工作在实模式下的。其他系统如果也工作在实模式下,中断向量表也是相同的。
386以后的机器,多了保护模式,在保护模式下中断向量变成了中断调用门,结构发生了变化。
中断向量表是存放内存的最低端。确实掉电数据丢失。重新启动的时候bios初始化过程中填充中断向量表,写入前存放在bios rom中。
dos的启动过程也修改中断向量表。
windows,linux工作在保护模式下,中断向量变成了中断调用门。
windows启动前的一段时间,bios工作在实模式下,也需要中断向量表。

回答3:

中断向量是指中断服务程序入口地址的偏移量与段基值,一个中断向量占据4字节空间。中断向量表是8088系统内存中最低端1K字节空间,它的作用就是按照中断类型号从小到大的顺序存储对应的中断向量,总共存储256个中断向量。在中断响应过程中,CPU通过从接口电路获取的中断类型号(中断向量号)计算对应中断向量在表中的位置,并从中断向量表中获取中断向量,将程序流程转向中断服务程序的入口地址
(中断源的识别标志,可用来形成相应的中断服务程序的入口地址或存放中断服务程序的首地址)称为中断向量。在Pc/AT中由硬件产生的中断标识码被称为中断类型号(当然,中断类型号还有其他的产生方法,如指令中直接给出、CPU自动形成等),即在中断响应期间8259A产生的是当前请求中断的最高优先级的中断源的中断类型号。中断类型号和中断向量之间有下面的关系: 中断类型号×4=存放中断向量的首地址 有了存放中断向量的首地址,从该地址开始的4个存储单元中取出的就是中断服务程序的入口

80x86中断向量
  I/O ADDR   INT TYPE FUNCTION   00 ~ 03 0 除法溢出中断   04 ~ 07 1 单步(用于DEBUG)   08 ~ 0B 2 非屏蔽中断(NMI)   0C ~ 0F 3 断点中断(用于DEBUG)   10 ~ 13 4 溢出中断   14 ~ 17 5 打印屏幕   18 ~ 1F 6,7 保留
8259中断向量
  I/O ADDR INT TYPE FUNCTION   20 ~ 23 8 定时器 (IRQ0)   24 ~ 27 9 键盘 (IRQ1)   28 ~ 2B A 彩色/图形 (IRQ2)   2C ~ 2F B 串行通信COM2 (IRQ3)   30 ~ 33 C 串行通信COM1 (IRQ4)   34 ~ 37 D LPT2控制器中断 (IRQ5)   38 ~ 3B E 磁盘控制器中断 (IRQ6)   3C ~ 3F F LPT1控制器中断 (IRQ7)
BIOS中断向量
  I/O ADDR INT TYPE FUNCTION   40 ~43 10 视频显示 I/O   44 ~ 47 11 设备检验   48 ~ 4B 12 测定存储器容量   4C ~ 4F 13 磁盘 I/O   50 ~ 53 14 RS-232 串行口 I/O   54 ~ 57 15 系统描述表指针   58 ~ 5B 16 键盘 I/O   5C ~ 5F 17 打印机 I/O   60 ~ 63 18 ROM BASIC 入口代码   64 ~ 67 19 引导装入程序   68 ~ 6B 1A 日时钟
提供给用户的中断
  I/O ADDR INT TYPE FUNCTION   6C ~ 6F 1B Ctrl - Break 控制的软中断   70 ~ 73 1C 定时器控制的软中断   参数表指针   I/O ADDR INT TYPE FUNCTION   74 ~ 77 1D 视频参数块   78 ~ 7B 1E 软盘参数块   7C ~ 7F 1F 图形字符扩展码
DOS中断向量
  I/O ADDR INT TYPE FUNCTION   80 ~ 83 20 DOS 中断返回   84 ~ 87 21 DOS 系统功能调用   88 ~ 8B 22 程序中止时 DOS 返回地址(用户不能直接调用)   8C ~ 8F 23 Ctrl - Break 处理地址(用户不能直接调用)   90 ~ 93 24 严重错误处理(用户不能直接调用)   94 ~ 97 25 绝对磁盘读功能   98 ~ 9B 26 绝对磁盘写功能   9C ~ 9F 27 终止并驻留程序   A0 ~ A3 28 DOS安全使用   A4 ~ A7 29 快速写字符   A8 ~ AB 2A Microsoft 网络接口   B8 ~ BB 2E 基本 SHELL 程序装入   BC ~ BF 2F 多路服务中断   CC ~ CF 33 鼠标中断   104 ~ 107 41 硬盘参数块   118 ~ 11B 46 第二硬盘参数块   11C ~ 3FF 47 ~ FF BASIC 中断

回答4:

1为啥要搞个DOS中断向量表,为什么不是其他系统的?因为你的程序是运行在dos环境下,早起的8086cpu是运行dos的,所以你只有调用dos中断才能实现功能。dos就是一个操作系统,它是给你的程序服务的。
2硬中断向量表是rom物理地址,比如内存的0x0000-0x0004是一个中断地址,04-08,……等,产生中断时ip指针会子总指向对应的中断地址。我只是举个例子,不同cpu设计时指定的中断地址是不一样的,具体可以查它的userguide。对电脑来说,该中断由bios处理。bios是写在cmos里的固化程序
软中断向量表是由软件管理的,你调用中断,操作系统根据向量号查找响应的中断服务程序并执行。windows系统的硬件中断,用户是不可以使用的,也就是你不可以在windows下直接操作物理端口,是一种保护机制,早期的dos是可以的。
电脑的中断由bios管理,并向上面的操作系统传递中断信号,允许操作系统处理这些中断,操作系统处理中断,不再向用户程序传递。

回答5:

中断向量表是放在内存中的,当电源启动的时候内存重新定义为FFFF:FFFF,中断向量在0:200里面。