WEB开发网
开发学院软件开发汇编语言 演示中断处理的实例(实例六) 阅读

演示中断处理的实例(实例六)

 2009-10-12 09:36:35 来源:WEB开发网   
核心提示:2.关于实例六的说明(1)时钟中断仍使用8H号中断向量为了即简单又清楚地演示在保护模式下响应外部中断并进行处理,实例使用了时钟中断源,演示中断处理的实例(实例六)(3),但没有通过重新设置中断控制器的方法改变对应的中断向量,所以,在后面的文章中将对SIDT指令作详细说明,本实例使用如下指令装载IDTR寄存器:lidtQ

2.关于实例六的说明

(1)时钟中断仍使用8H号中断向量

为了即简单又清楚地演示在保护模式下响应外部中断并进行处理,实例使用了时钟中断源,但没有通过重新设置中断控制器的方法改变对应的中断向量。所以,时钟中断使用的8H号中断向量号就与双重故障异常使用的中断向量号发生冲突。但实例仅是演示程序,所以只要保证不发生双重故障异常,就可避免冲突,从而不会影响演示。

设置中断屏蔽寄存器,仅开放时钟中断。所以,在开中断状态下,也只可能发生时钟中断,而不会发生其它外部中断。

(2)时钟中断处理程序的设计

由于通过中断门转时钟中断处理程序,所以在控制转移时不发生任务切换。但外部中断随时可能发生,因此中断处理程序必须采取保护现场等措施。作为演示程序,该中断处理程序检查和调整在其数据段中的计数器,满18次后,就认为已满一秒,再调整用于显示的倒计数信息。如果倒计数信息为0,那么就设置演示程序数据段中的时间为0标志。该中断处理程序通过约定的数据区与显示程序及演示程序交换信息。

(3)利用一个软中断(陷阱处理)程序实现显示

为了演示陷阱及其处理,把显示过程安排成陷阱处理程序。上述时钟中断处理程序通过软中断调用指令INT调用该显示程序,以显示倒计数。在控制转移时,也没有任务切换。该陷阱处理程序相当于一个“软中断”处理程序,类似实模式下的BIOS中断INT 10H。

(4)对其它中断或异常的响应

为了简单,除了8H号和0FEH号外,IDT中其它的门均通向一个处理程序。该处理程序用于处理其它中断或异常。处理过程也极其简单,在屏幕左上角显示蓝底白字的符号“!”,然后进入无限循环。实际上,按演示程序现在的安排,不可能发生这种情况。

(5)没有特权级变换

为了简单,实例涉及的中断处理程序和异常处理程序都保持特权级0。所以,控制转移时不发生特权级变换。因此,没有使用其它堆栈。

(6)对IDT的初始化

由于IDT中门描述符没有32位段基地址,并且入口点偏移较小,所以就直接填写门描述符结构变量,没有额外再初始化。过程InitIDT只是设置IDT伪描述符。

(7)装载和保存IDTR寄存器

再使IDT发挥作用之前,还要装载中断描述符表寄存器IDTR;但为了回到实模式后,恢复原来的IDTR之内容,所以先保存IDTR的内容。实例使用如下指令保存IDTR:

sidt  QWORD PTR NORVIDTR

该指令的功能是把IDTR的内容保存到存储器中的伪描述符NORVIDTR中。该伪描述符的结构如前文所述的结构类型PDESC所示,低字是以字节为单位的界限,高双字是基地址。在后面的文章中将对SIDT指令作详细说明。

本实例使用如下指令装载IDTR寄存器:

lidt  QWORD PTR VIDTR   lidt  QWORD PTR NORVIDTR

LIDT指令类似于LGDT指令,在后面的文章中将对LIDT指令作详细说明。

上一页  1 2 3 

Tags:演示 中断 处理

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接