您的位置:首页 > 编程语言

X86保护模式编程总结(6)

2010-11-25 01:33 309 查看
中断和异常
中断:
可屏蔽中断,在CPU的INTR引脚接收的中断请求,IF=1时才允许发生可屏蔽中断
不可屏蔽中断,在CPU的NMI输入脚上接收到,CPU无法关闭不可屏蔽中断.
异常:
CPU检测的异常被分为3种:
故障,是在已被检测到异常的指令之前的指令边界上报告的异常.故障在恢复到允许指令重新启动状态时由机器报告.用于故障处理程序的返回地址指向故障的指令,而不是指会故障指令之后的指令.
自陷,自陷是在已被检测到异常指令之后紧接着的指令边界上报告的异常.
中止,中止并不总是报告引起的异常的指令位置,并且不允许引起异常的程序重新启动.中止被用来报告几种错误,例如硬件错误和在系统表中有不一致的或非法值.
由编程引发的异常.INTO,INT3,BOUND指令触发.常称为软件中断.CPU象异常一样处理它


异常和中断表
向量号 说明(实) 异常源
0(Y,故障) 除法错 DIV和IDIV指令
1 调试程序调用 任何
2 NMI中断 不可屏蔽中断
3(N,自陷) 断点 INT指令
4(N,自陷) 溢出
5(Y,故障) BOUND范围超出(数组范围超出) BOUND指令
6(Y,故障) 无效操作码 保留的操作码
7(Y,故障) 设备不可用 ESC或WAIT指令
8(Y,中止) 双故障 中断表限大小,在处理故障时发生另一个故障
9 (intel保留,不要用)
10(Y,故障) 无效任务状态段 JMP.CALL,RET
11(Y,故障) 段不存在 改变段的任何指令
12(Y,故障) 堆栈异常 堆栈操作超越地址限值
13(Y,故障/自陷) 一般保护
14(Y,故障) 页面故障 引起存储器的任何指令
15 (intel保留,不要用)
16(Y,故障) 浮点错 ESC或WAIT
17(Y,故障) 对齐检查 任何数据引用
18 机器检查异常
19-31 (intel保留,不要用)
32-255(N,自陷) 可屏蔽中断(软中断)


EFLAGS寄存器的RF标志用来防止对一个指令断点故障多次服务,在每一条指令顺利完成时,RF均被CPU清零,除了IRET,JMP,CALL,INT这些引起任务切换的指令之后.在第一次试图执行指令时RF为零,而若试图在一个指令断点或任务其它故障之后重新启动指令,RF置1.

同时发生多个异常和中断时的优先级
(高) 类 说明
1 在上一指令自陷
--断点
--调试自陷异常(TF=1,TSS中T=1,或数据/IO断点)
2 外部中断
--NMI中断
--可屏蔽中断
3 取下一指令时的故障
--代码断点故障
--代码段超越
--预取时的页故障
4 下一指令译码时的故障
--非法操作码
--指令长度>15字节
--协处理器不可用
5 执行指令时的故障
--一般检测
--FP错误(来自前面的FP指令)
--溢出中断
--BOUND超出范围
--无效TSS
--段不存在
--堆栈异常
--一般保护异常
--数据页故障
--对齐检查


中断门和自陷门的区别:
主要区别是它们对IF标志(EFLAGS中)的影响.使用中断门的中断清零IF,这样防止了其它中断干扰当前中断处理程序.其后面的IRET指令把IF恢复为保持在堆栈上的EFLAGS寄存的内容.而通过自陷门的中断不改变IF.


中断过程中堆栈的变化(异常和中断之后的堆栈祯):
[无特权级改变 [无特权级改变 [特权级改变 [特权级改变
无出错代码] 有出错代码] 无出错代码] 有出错代码]
原EFLAGS 原EFLAGS 不用(来自TSS的ESP) 不用(来自TSS的ESP)
原CS 原CS 原SS 原SS
原EIP 原EIP 原ESP 原ESP
出错代码 原CS 原EFLAGS
原EIP 原CS
原EIP
出错代码


出错代码:
格式: 31-16 15-3 2 1 0
保留 选择符的 TI IDT EXT
变址值


注:出错和选择符相似
1,如果程序的外部事件引起异常,则EXT=1
2,如果出错代码的变址值部分引用IDT中的门描述符,则IDT=1
3,如果IDT=0,则TI位指明出错代码引用GDT还是LDT (TI=0?GDT:LDT)
4,3-15位对应选择符的高位.


异常条件:
下面每项描述将异常分为故障,自陷和中止
故障 --- 保存CS和EIP的内容并指向产生故障的指令
自陷 --- 保持在自陷发生时存储的CS和EIP的内容,指向产生自陷的指令之后将被执行的令.如果在转移指令时检测到自陷,则保持的CS和EIP是转移的目标.而不是转移指令
中止 --- 中止是既不知道引起异常的指令位置,又不允许重新启动引起异常的程序的那种异常.中止被用来报告严重的错误.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: