C语言中断服务程序设计:硬件中断与中断向量表详解

需积分: 48 1 下载量 109 浏览量 更新于2024-07-12 收藏 650KB PPT 举报
中断类型号在计算机硬件中断程序设计中扮演了关键角色,它定义了CPU能够识别和处理的不同类型的中断事件。在86系列CPU中,总共可以处理256种不同的中断,这些中断类型号范围从0x00到0xff,按照其功能可分为两大类:不可屏蔽中断(NMI)和可屏蔽中断(INTR)。不可屏蔽中断通常用于处理紧急情况,而可屏蔽中断则允许用户根据需要选择是否接受中断。 外部中断(也称为硬件中断)通过CPU的特定输入/输出引脚(如NMI和INTR)来触发,它们是来自外部设备或硬件系统的中断请求。中断允许标志IF允许或禁止对INTR中断的响应,可以通过设置IF为0来屏蔽中断,而设置为1则启用中断。 内部中断涉及微处理器自身产生的中断,如单步调试、除法错误和溢出,以及由中断指令引起的软件中断,如DOS中断和BIOS中断,后者为用户提供了一系列操作系统和底层设备驱动的功能。在编程中,DOS和BIOS中断经常被C语言应用。 中断向量表是存储中断服务子程序地址的数据结构,位于内存的低地址区域,每个中断类型占用4个字节。当CPU检测到中断请求时,会根据中断类型号从向量表中找到对应的中断服务子程序地址,然后执行相应的处理代码。 在实际硬件中断程序设计中,程序员需要编写两种关键函数:中断服务函数(interrupt函数)和设置中断向量函数(setvect)。中断服务函数,例如`void interrupt myint(void)`,应该以中断函数的形式定义,以便在中断发生时能够正确处理。而setvect函数用于将中断服务函数的地址映射到中断向量表的相应位置,例如设置中断类型号为0x08的中断服务程序`myint`。 在C语言编程中,调用`setvect`函数的语法如下:`void setvect(int num, void interrupt (*isr)());`,其中`num`是中断类型号,`isr`是中断服务函数的函数指针。通过这样的机制,程序员能够灵活地配置和管理中断处理流程,确保系统能够高效且准确地响应各种中断事件。