• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >汇编语言 > 80386的异常类型

80386的异常类型

作者:匿名 字体:[增加 减小] 来源:互联网 时间:2017-06-28

匿名通过本文主要向大家介绍了心理异常的常见类型有,java异常类型,异常类型,常见的构音异常类型,染色体异常类型等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
</div> 象中断分为多种类型一样,异常也可分为多种类型。

1.80386识别的异常

  80386识别的多种不同类别的异常及赋予的对应中断向量号如下表所示。某些异常还以出错码的形式提供一些附加信息传递给异常处理程序,出错代码列中的“无”表示没有出错代码,“有”表示有出错代码。
异


常


一


览


表
向量号 异常名称 异常类型 出错代码 相关指令
0 除法出错 故障 无 DIV,IDIV
1 调试异常 故障/陷阱 无 任何指令
3 单字节INT3 陷阱 无 INT 3
4 溢出 陷阱 无 INTO
5 边界检查 故障 无 BOUNT
6 非法操作码 故障 无 非法指令编码或操作数
7 设备不可用 故障 无 浮点指令或WAIT
8 双重故障 中止 有 任何指令
9 协处理器段越界 中止 无 访问存储器的浮点指令
0AH 无效TSS异常 故障 有 JMP、CALL、IRET或中断
0BH 段不存在 故障 有 装载段寄存器的指令
0CH 堆栈段异常 故障 有 装载SS寄存器的任何指令、对SS寻址的段访问的任何指令
0DH 通用保护异常 故障 有 任何特权指令、任何访问存储器的指令
0EH 页异常 故障 有 任何访问存储器的指令
10H 协处理器出错 故障 无 浮点指令或WAIT
11H—0FFH 软中断 陷阱 无 INT n


由上表可见,保护模式下的某些中断向量号的分配与实模式的中断向量号发生了冲突。实模式下的中断向量号的分配基于PC微机系统的8086/8088 CPU,上表中的中断向量号的分配是80386所规定的。实际上,Intel在宣布8086/8088时,保留了这些发生冲突的中断向量号。尽管发生这样的冲突,但以80386为CPU的微机系统仍可保持与以8086/8088为CPU的微机系统的兼容,原因是在80386的实模式下,几乎不发生那些中断向量号与外部硬件中断请求时所提供的中断向量号存在冲突的异常。需要注意的是,在保护模式下必须重新设置8259A中断控制器,以产生不与异常相冲突的硬件中断向量。

2.故障类异常

  当发生故障,控制转移到故障处理程序时,所保存的断点CS及EIP的值指向引起故障的指令,以便在排除故障后恢复执行。

(1)除法出错故障(异常0)

  除法出错是一种故障。当执行DIV指令或IDIV指令时,如果除数等于0或者商太大,以至于存放商的操作数容纳不下,那么就产生这一故障。除法出错故障不提供出错码。

(2)边界检查故障(异常5)

  如果BOUND指令发现被测试的值超过了指令中给定的范围,那么就发生边界检查故障。边界检查故障不提供出错码。

(3)非法操作码故障(异常6)

  如果80386不能把CS和EIP所指向存储单元的位模式识别为某条指令的部分,那么就发生非法操作码故障。当出现如下情况时,发生这样的故障:(1)操作码字段的内容不是一个合法的80386指令代码;(2)要求使用存储器操作数的场合,使用了寄存器操作数;(3)不能被加锁的指令前使用了LOCK前缀。非法操作码故障不提供操作码。

(4)设备不可用故障(异常7)

  设备不可用故障支持80387数字协处理器。在没有80387协处理器硬件的系统中,可用该异常的处理程序代替协处理器的软件模拟器。在发生任务切换时,使得只有在新任务使用浮点指令时,才进行80387寄存器状态的切换。设备不可用故障不提供出错码。该故障在下列情况下产生:(1)在执行浮点指令时,控制寄存器CR0中的EM位或TS位为1;(2)在执行WAIT指令时,控制寄存器CR0中TS位及EM位都为1。需要注意的是,本异常的处理程序必须是一个过程而不能是任务,否则当处理程序发布一条IRET指令时,80386就设置TS位。然后协处理器再次执行这个发生故障的指令,发现TS是置位的,因此就再次发生异常7,结果是无休止的循环。处理程序能通过陷阱门被调用,因为执行期间可以允许中断。

(5)无效TSS故障(异常0AH)

  当正从任务状态段TSS装入选择子时,如果发生了除了段不存在故障以外的段异常时,就发生无效TSS故障。在进入故障处理程序时,保存的CS及EIP指向发生故障的指令;或者该故障作为任务切换的一部分发生时,指向任务的第一条指令。   无效TSS故障提供了一个出错码,出错码的格式如下图所示。其中选择子部分是指向引起故障的TSS的选择子。16位的出错代码的主要成分是选择子,指向引起故障的TSS的选择子。高13位是选择子的索引部分,TI位是描述符表指示位。
出错代码的格式
BIT15—BIT3 BIT2 BIT1 BIT0
选择子的索引部分 TI IDT EXT

  上图所示出错码格式是异常时出错码的一般格式。从图中可见出错码中不含选择子的RPL,而由IDT位和EXT位代替。当处理某一异常或外部中断时,又发生了某种异常,那么EXT位置1。当从中断描述符表IDT中读出表项并产生异常时,IDT位置1,这只在中断或异常的处理期间才会发生。当没有选择子时,构成出错码选择子部分的值为0。   一些引起无效TSS故障的原因如下:   TSS描述符中的段限长小于103;   无效的LDT描述符,或者LDT未出现;   堆栈段不是一个可写段;   堆栈段选择子索引的描述符超出描述符表界限;   堆栈段DPL与新的CPL不匹配;   堆栈段选择子的RPL不等于CPL;   代码段选择子索引的描述符超出描述符表界限;   代码段选择子不指向代码段;   非一致代码段的DPL不等于新的CPL;   一致代码段的DPL大于新的CPL;   对应DS、ES、FS或GS的选择子指向一个不可读段(如系统段);   对应DS、ES、FS或GS的选择子索引的描述符超出描述符表的界限。
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 80386的异常类型

相关文章

  • 2017-06-28汇编xor小妙用
  • 2017-06-28VxD程序入门
  • 2017-06-28汇编源码系列之showmem
  • 2017-06-28Mixer Volume Ctrler V1.0
  • 2017-06-28什么是动态链接库
  • 2017-06-17子程序调用指令
  • 2017-06-28汇编源码系列之gameport
  • 2017-06-28Casl汇编语言辅导
  • 2017-06-17文本操作
  • 2017-06-17键盘I/O

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 汇编语言的艺术-基本认识(三)
    • 汇编源码系列之driver
    • 关于汇编div/idiv/mul/imul指令的用法
    • 汇编的字符串操作指令
    • GUI编程中以对话框为主要界面的应用程序
    • 汇编创建简单的窗口
    • 汇编教程:管道
    • 制作动态链接库
    • 基于微处理器的计算机系统构成
    • 汇编xor小妙用

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有