比如0号除数为0的那个异常描述符对应的DPL就为0,
Index Selector:Offset Type DPL P bit
000 0008:804DF51E E 00 P
假设我们用户态的程序执行了下面代码
int a=9,b;
b=a/0;
CPU应该捕获到该异常并跳入到其对应的异常处理程序,但是依照保护模式的规则,
必须先检查CPL<=DPL 才会进行权限转移。可当前的CPL是3,而DPL为0。
你在1楼问的东西: 若 CPL<DPL(中断程序所在节区) 是会产生保护例外的 INT 0D
(等级高的不可以呼叫等级低的)
因为中断何时都可能发生, 为了避免保护例外所以很多可能在任何时候都可能发生的中断
例如 除零(INT 0) , 其 DPL设为0 , 没人比 0 更低了. Ring0~3 都可用.
而常见的 INT 2E 只给 Ring3用, 所以他的 DPL 被设为 3.
而你在3楼写的刚好相反, 唯一的解释是他讲的是我们程序内写的 INT xx 所制造出来的中断
因为这种制造出来的中断尚需再多一项检查 : 需 CPL<=DPL 才有制造的资格.
你可以试试你在程序写个 INT 00 来看看他会到 INT 0D 还是真的进入 INT 00
INT 00 的 DPL = 0
而你的程序 CPL = 3
CPL>DPL 你无权制造这个中断, 将产生保护例外 INT 0D , 所以是进入了 INT 0D
而非你愿进 INT 00