中断处理

2019-04-15 15:36发布

中断处理主要分为以下几个步骤:初始化PIC -> 编写中断处理函数 -> 在IDT中注册中断   1. 初始化PIC:1) 设定一些模式;                         2) 将PIC各管脚接收到的IRQ与中断号对应起来,决定IRQ以哪一号中断通知CPU;                         3) 确定主从PIC之间的连接方式。
     PIC(可编程中断控制器,Programmable Interrupt Controller),由于CPU只能处理一个中断,所以需要PIC来帮助处理多个中断。           中断发生以后,如果CPU可以受理这个中断,CPU就会命令PIC发送2个字节的数据。由于电路设计的原因,这两个字节的数据在CPU看来,与从内存读进来的程序是完全一样的。而该传输的数据就是调用BIOS时的INT指令,CPU即执行该数据,也就将数据当作程序来执行的情况。
2. 编写中断处理函数:主要是让CPU从相应设备端口读取数据,然后对读取到的数据进行相应的处理(比如将数据放入队列,在下半部进行处理)。            从端口读取数据的函数(读取一个字节的数据):                _io_in8:     // io_in8(int port)                     MOV EDX, [ESP + 4]                     MOV EAX, 0                     IN     AL, DL                     RET      其中,EAX一般作为返回值返回,所以都将值赋给EAX。
     为了加快中断处理的效率,一般上半部只负责数据的接收,然后将数据存入队列。下半部负责从队列中读取数据并进行处理。
3. 在IDT(中断记录表)中注册中断:      中断描述符表(Interrupt Descriptor Table,IDT)是一个系统表,它与每一个中断或异常相联系,每一个向量在表中存放的是相应的中断或异常处理程序的入口地址。