中断向量

中断向量解析
本文详细介绍了计算机系统中中断向量的分配与用途,包括不同类型的中断向量表及其在内存中的位置,如BASIC中断向量、DOS中断向量等,并解释了实模式下中断向量的设计原理。

关于中断向量的几点注释
1. 系统引导时,中断向量表放在内存何处?
     系统刚引导时,内存0x00000到0x0003FF共1KB的空间用于存放中断向量表。每个中断向量占用4个字节,共可存储256个中断向量。
2. 系统引导时,处在实模式下,只可寻址1MB,为什么要用4个字节来寻址中断呢处理程序?
     刚看到的时候,我也很纳闷。我们都知道编程的时候指针都是4个字节的,可以寻址4GB,在实模式下完全可以少用字节啊?其实实模式的内存选址方式是:段值 * 16 + 偏移值,就是内存地址。而这4个字节中,2个字节存储段值,两外两个存储偏移值。所以共有4个字节。

3. 这篇资料是看书和从网上整理而来的,不同的资料间往往有些冲突的地方,这样就难免有些错误,以后再做修订。

中断向量表

内存地址(十六进制)对应向量号(十六进制)中断用途
BASIC中断向量
0x3C4 - 0x3FFF1-FF未使用
0x218 - 0x3C386-F0BASIC程序运行时提供给BASIC解释程序作用
0x200 - 0x21780-85为BASIC保留
0x1E0 - 0x1FF78-7F未使用
0x1DC - 0x1DF77硬件中断15
0x1D8 - 0x1DB76硬件中断14
0x1D4 - 0x1D775硬件中断13
0x1D0 - 0x1D374硬件中断12
0x1CC - 0x1CF73硬件中断11
0x1C8 - 0x1CB72硬件中断10
0x1C4 - 0x1C771硬件中断9
0x1C0 - 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/O
0x054 - 0x05715盒式磁带I/O
0x050 - 0x05314RS-232串行通讯口I/O
0x04C - 0x04F13磁盘I/O
0x048 - 0x04B12测定存储器容量
0x044 - 0x04711设备检验
0x040 - 0x04310屏幕显示I/O
8259中断向量
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除以零



参考资料:
1.IBM-PC汇编语言程序设计
2.80X86汇编语言程序设计教程

### 中断向量表、中断向量地址及其工作原理 在计算系统中,**中断向量表(Interrupt Vector Table)** 和 **中断向量地址(Interrupt Vector Address)** 是处理中断和异常的重要制。它们的作用是将特定的中断或异常映射到相应的处理程序(中断服务函数),以确保处理器能够正确响应外部设备或内部错误引发的事件。 #### 中断向量表的作用 中断向量表是一个存储中断处理程序入口地址的数据结构。每个中断源都有一个唯一的编号,称为**中断向量号**。当中断发生时,处理器会根据这个编号查找中断向量表,并跳转到对应的中断处理程序执行相关操作。例如,在ARM架构中,中断向量表通常包含多个入口地址,分别对应不同的异常类型,如复位、未定义指令、软件中断、预取指中止、数据中止等[^2]。 #### 中断向量地址的意义 中断向量地址是指中断向量表的起始地址。在系统启动时,处理器需要知道从哪里开始读取中断向量表的内容。默认情况下,许多处理器会在固定的地址(如0x00000000)加载中断向量表。然而,在实际应用中,特别是在裸开发或操作系统环境中,可能需要将中断向量表移动到其他内存区域。这种偏移可以通过配置中断控制器(如GIC)来实现。设置中断向量偏移的原因包括避免与保留地址冲突、支持多核系统中的不同向量表布局等[^1]。 #### 工作原理 当中断发生时,处理器的工作流程如下: 1. **识别中断源**:处理器确定哪个中断被触发,并获取其对应的中断向量号。 2. **计算中断向量地址**:根据中断向量号和当前中断向量表的基地址,计算出该中断对应的向量地址。 3. **跳转到中断处理程序**:从向量地址中读取中断处理程序的入口地址,并跳转到该地址执行中断服务函数。 以下是一个简单的伪代码示例,展示如何手动设置中断向量表的位置: ```c // 定义中断向量表的基地址 #define VECTOR_BASE 0x20000000 void setup_interrupt_vector_table() { // 设置中断向量表的偏移地址 SCB->VTOR = VECTOR_BASE; // 假设SCB是系统控制块寄存器组 } // 复位中断服务函数 void Reset_Handler() { // 初始化中断向量表 setup_interrupt_vector_table(); // 其他初始化代码... } ``` 上述代码展示了在裸开发环境下,如何在复位中断服务函数中手动指定中断向量表的位置。而在操作系统环境下,通常由内核负责初始化中断控制器,并动态管理中断向量表的布局。 ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值