首页 理论教育 中断处理程序-微型计算机原理

中断处理程序-微型计算机原理

时间:2023-11-03 理论教育 版权反馈
【摘要】:由于处理机在响应中断的时候已经将IF和TF标志位清除,在中断处理程序未将这两个标志位置位之前,处理机将不会响应任何可屏蔽的硬件中断。EOI指令只用于处理中断请求来自可编程中断控制器8259A的中断处理程序,响应其他类型中断请求的中断处理程序可以直接用IRET指令返回而无需发送EOI指令。

中断处理程序-微型计算机原理

中断被触发之后,处理机将在允许的情况下响应中断请求,中断的硬件系统将处理机状态寄存器、CS寄存器和IP寄存器入栈,清除IF和TF标志位,并根据中断向量表中的中断向量转移到相应的中断处理程序,以实现对中断事件的处理。

中断处理程序在编写上和普通的子程序没有实质上的区别。由于处理机在响应中断的时候已经将IF和TF标志位清除,在中断处理程序未将这两个标志位置位之前,处理机将不会响应任何可屏蔽的硬件中断。如果中断处理程序在逻辑上允许响应其他硬件中断,则可以使用STI指令将IF标志位置位,以允许处理机响应其他的可屏蔽硬件中断。

由于中断可以在任何时刻被触发,中断被触发时处理机中的每个寄存器都有可能被正在运行的程序所使用,所以在中断处理程序必须保存任何使用到的寄存器的值,以免这些寄存器中的值被破坏。一般来讲寄存器的值可以用PUSH指令保存在堆栈中,直到中断处理程序完成其工作即将返回时再使用POP指令恢复这些寄存器的值,这个过程又被称作“保存处理机现场”和“恢复处理机现场”。

在处理机现场被保存之后,中断处理程序就可以根据中断的原因进行相应的处理了,这些处理通常会包括一系列使用IN和OUT指令对I/O端口的访问,以实现对硬件的访问和控制。所有中断响应的操作完成之后,中断处理程序通过一系列的POP指令恢复处理机现场,再执行IRET指令,根据中断响应时压入堆栈的处理机状态寄存器、CS寄存器和IP寄存器的值返回到中断发生时正在执行的程序,完成中断处理过程。如果中断请求来自于可编程中断控制器8259A,中断处理程序还必须执行下面的一段代码,以将EOI(End of Interrupt,中断结束)指令发送给可编程中断控制器8259A,以解除可编程中断控制器8259A对同优先级及低优先级硬件中断请求的屏蔽。EOI指令只用于处理中断请求来自可编程中断控制器8259A的中断处理程序,响应其他类型中断请求的中断处理程序可以直接用IRET指令返回而无需发送EOI指令。

MOV AL,20H

OUT 20H,AI.

总的来讲,中断处理程序的结构可以套用下面的程序段。

只有中断处理程序的入口地址被存储到中断向量表中之后,中断处理程序才能够在中断发生时被处理机调用。将中断处理程序的入口地址存储到中断向量表的工作,需要通过DOS功能调用的25H号功能实现:

MOV AX,SEG INT_PROC

MOV DS,AX(www.xing528.com)

MOV DX,OFFSET INT_PROC

MOV AX,2508H

INT 21H

上面程序段实现了将INT_PROC地址放到8号中断的中断向量表项的功能。只要在通过INT 21H陷入指令调用DOS功能调用之前设置AH为25H(功能编号)、AL为中断类型码、DS:DX为中断处理程序入口地址,在INT 21H指令执行之后AL指定的中断类型码对应的中断向量将指向DS:DX所给出的中断处理程序入口地址。

类似地,我们可以通过AH=35H的DOS功能调用读取中断向量:

MOV AX,3508H

INT 21H

AH设为功能编号35H、AL设为中断类型码,INT 21H指令执行后AL指定的中断类型码对应的中断向量将被存储在ES:BX中。上面程序段实现的功能就是取8号中断的中断向量。如果新的中断处理功能只供自己使用,或者自己编写的中断处理程序被用来增加或替代系统中断处理程序的某些功能的时候,原始的中断向量必须被妥善保存,并在程序退出之前将原始的中断向量通过25H号DOS功能调用恢复。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈