- 1、本文档共9页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
8259A与中断
8295A与中断
中断和异常中断和异常(msn:xanderzhang@,群群:4733369)o本文来自网络本文来自网络
学过8086/8088汇编的人肯定对于中断这个概念都不陌生。在80386中,这个概念在一定程度上发生了变
化,并引入了“异常”这个新概念。本篇文章就是围绕在操作系统开发中涉及到中断和异常的讨论。
中断中断
中断在系统中是由外部事件所引起的,如:一次I/O操作的结束。其产生与CPU当前所执行的指令没有关
系。从是否能够被屏蔽来划分,可将其分为两类,即可屏蔽中断与不可屏蔽中断,其中前者由CPU的INTR
引脚接收信号,后者由NMI引脚接收信号。
由于产生中断的中断源并不单一,因此在INTR接收中断的时候,同样还要接收一个8位的中断向量号,以
判断是谁发出的中断请求。CPU对于某个中断 向量号是由谁发出原则上并没有规定。但在实际系统中,为
了避免产生冲突,部分中断向量号都有自己固定的中断源,这一工作是由可编程中断控制器(PIC)完 成
的。在80386系统上,该PIC是8259A 。该芯片功能十分强大,不仅能向CPU提供中断向量号,还可以自
主处理中断请求的优先级。每个8259A 芯片可以支持8个中断请求信号,并可进行级连。对于8259A的介
绍,我们将在文章的后半部分进行。
对于是否屏蔽可屏蔽中断可以通过8259A有选择地控制,也可以通过CPU的CLI和STI指令实现。CLI和
STI指令可以设置EFLAGS寄存 器的IF位,如果该位被清除,则CPU会禁止外部中断传递信号给INTR引
脚。但对于CPU内部异常和NMI该位不起作用。在执行这两条指令时,必须要保 证当前CPL小于等于
IOPL ,否则会引起通用保护故障。当然虽然NMI是不可屏蔽中断,但通过将CMOS端口(0x70)中第7位置
1这种手段也可以将 NMI也屏蔽掉的,当然需要打开该中断将该位清零就可以了。
实现代码如下:
#define PORT_CMOS 0x70
void disable_NMI()
{
byte val;
val = inportb(PORT_CMOS);
outportb(PORT_CMOS, val | 0x80);
}
void enable_NMI()
{
byte val;
val = inportb(PORT_CMOS);
outportb(PORT_CMOS, val 0x7F);
}
异常异常
异常是在CPU执行指令期间遇到非法指令所产生的。因此异常与当前指令存在着关系,例如:除零,特权
级不正确等等,都会触发异常。80386可以识 别多种不同的异常,并以不同的中断向量号来标示它们。在
异常发生时,CPU就根据原先设定好的中断向量号转到不同的中断处理程序(ISR)执行。
根据是由是否可恢复和恢复点位置不同将异常划分为三种。它们是故障(Fault),陷阱(Trap)和中止
(Abort) 。
80386认为故障是可以排除的,因此在CPU遇到引起故障的指令的时候,会保存当前的CS和EIP值,并转
去执行故障处理程序。在故障排除后,执 行IRET指令回到刚在引发故障的位置,重新执行刚才触发故障的
指令。例如,当程序企图装入一个不存在的段时将会引发一个故障,这时操作系统会将该段装 入,并重新
进行刚才的操作。
陷阱与故障的区别主要在于,在执行陷阱处理程序之前,系统会保存CS和EIP的值为引起陷阱的下一条要
执行指令所在的位置。例如,软中断就是典型的陷阱。
中止是在系统发生严重错误时产生的。在引起中止后,当前执行的程序不能被恢复执行。并且系统在接受
到中止后,中止处理程序要重新建立各种系统表。引起这类错误的主要原因是系统表的数据不一致或者非
法等。
下表列出了80386在保护模式下的中断和异常
向量号 名称 异常类型 出错代码 相关指令
0 除法错 故障 无 DIV,IDIV
1 调试 故障/陷阱 无 调试状态下
3 断点 陷阱 无 INT 3
4 溢出 陷阱 无 INTO
5 界限检查 故障 无 BOUND
6 无效操作码 故障 无 非法指令
7 无80X87 故障 无 ESC,
文档评论(0)