汇编学习笔记(18) - 中断与异常

基本概念

  80386将8086中的中断分成了两个

中断

由外部硬件引起的中断仍然较中断 

异常

有内部中断引起的中断改叫异常,因为为他一般与代码的运行有关,而中断一般与代码的运行无直接关系

然后根据 恢复点,即异常处理完之后从哪里介质运行又细分为3类

故障

在指令运行前或运行中出异常,处理完异常后会重新执行指令,比如缺页异常 

陷阱

在指令运行完之后出异常,异常处理完后从吓一跳开始处理,比如INT软中断 

终止

处理完之后会返回,有处理程序自己决定怎么办,一般是很严重的错误,比如处理异常的时候出异常了

 

虽然对中断做了细分,但是处理方式还是和8086差不多,只不过中断表被保存在了IDT寄存器中

IDT寄存器中只能有中断门,陷阱门,任务门,注意这里的陷阱门与 中断分类的陷阱门没直接区别,所以当中断发生的时候根据中断号,在IDT表中找到对应的处理程序。

这里没有强制的对应关系,也就是说无论何种中断或异常,他的处理程序都可以是  中断门,陷阱门,任务门 中的异常

 

权限要求

如果是有CPU主动触发的中断或异常,他是不比较CPL和门的DPL的

如果是INT指令触发的,则需要比较CPL和门的DPL要求是 CPL<= DPL

 

中断门和陷阱门

中断门和陷阱门的处理方式和用CALL调用任务门是一样的,当门指向的是非一致代码段,并且CPL> DPL的时候会设CPL = DPL,返回用IRET,同样IRET和RET的处理方式也是一模一样,所以这里甚至可以用RET代替IRET

注意中断门和陷阱门市当前任务下进行的,所以环境的保护需要自己处理

中断门和陷阱门的唯一区别就是是否自动启动中断屏蔽即标志位IF的置位区别

 

任务门

和直接用CALL 调用门也没啥区别,唯一的区别就是这里会将中断信息压栈到新任务的堆栈上,处理完也是用IRET返回,IRET可以通过标志寄存器的TN位知道这次是任务门调用还是中断门和陷阱门的调用,然后根据情况选择是代码转跳还是任务切换。好像RET也行?

 

注意点: 中断和陷阱门在原任务环境下运行,所以要注意环境的保护,而任务门则切换的任务环境起到了隔离的的作用相对安全,各有利弊

 

 

 

 

posted @ 2020-02-22 16:45  蹦蹦骑士  阅读(667)  评论(0编辑  收藏  举报