80386中断与异常详解-Intel CPU异常处理

需积分: 45 13 下载量 82 浏览量 更新于2024-08-08 收藏 5.09MB PDF 举报
"80386中断和异常一览表-rockchip rk1108 datasheet v0 3 20160706" 在80386微处理器中,中断和异常是处理系统事件和错误的核心机制。中断允许CPU响应外部设备的请求,如键盘输入、定时器中断等,而异常则用于处理内部错误和非法操作。以下是80386中断和异常的详细解析: 0 - 除法出错:当执行DIV或IDIV指令时,如果除数为零或结果溢出,CPU会触发这个异常。这是对数学运算错误的保护机制。 1 - 调试异常(含单步):任何指令执行后都可能触发此异常,尤其是在调试模式下。单步执行(TRAP)也会引起此异常,用于调试目的。 2 - 非屏蔽中断:这类中断具有最高优先级,不受当前中断屏蔽位的影响,可以随时被CPU处理。例如,时钟中断就是非屏蔽中断。 3 - 断点(单字节INT 3):程序员可以使用INT 3指令设置断点,当CPU执行到该指令时,会引发异常进入调试模式。 4 - 溢出:执行可能导致溢出的算术运算(如ADD、SUB、MUL、IMUL)后,如果结果无法在指定的数据类型内表示,CPU会触发溢出异常。 5 - 边界检查:BOUND指令用于防止数组访问超出其定义的边界,如果访问越界,将产生此异常。 6 - 非法操作码:当CPU遇到不合法的指令编码或操作数时,如执行未知指令,会抛出非法操作码异常。 7 - 协处理器无效:浮点运算指令或者WAIT指令执行时,如果没有有效的浮点处理器或者处理器处于非活动状态,会触发此异常。 8 - 双重故障:当发生一个无法处理的异常时,CPU会尝试触发双重故障异常,这是一个严重错误的指示。 9 - 协处理器段超越:访问内存的浮点指令导致的异常,可能是因为协处理器段寄存器错误。 0AH - 无效TSS:跳转、调用、中断或IRET指令执行时,如果目标任务状态段(TSS)无效,会出现这个异常。 0BH - 段不存在:加载段寄存器或使用段寻址时,如果段不存在,会触发异常。 0CH - 堆栈段异常:装载SS寄存器或用SS寻址时,如果堆栈段有问题,如段选择子无效或段不存在,会引发此异常。 0DH - 通用保护异常:任何访问内存的指令或特权指令执行时,如果违反了内存访问权限,比如尝试读写只读段,会触发此异常。 0EH - 页失效:执行内存访问时,如果页表指示的页面不存在或者访问权限不符,会引发页失效异常。 0FH - 保留:这个中断号通常不用于80386,可能在其他处理器中有所分配。 10H - 协处理器出错:浮点运算指令或WAIT指令导致的错误,如浮点运算异常。 11H - 保留:这个中断号在80386中未定义,可能在特定系统或后续处理器中使用。 12H - 保留:同样未在80386中定义,可能在其他上下文中有特殊用途。 13H - 保留:一般留给软硬件供应商定义,可能用于特定设备驱动。 14H - 保留:通常用于串口驱动程序。 15H - 保留:通常用于扩展BIOS服务。 16H - 保留:可能用于键盘驱动程序。 17H - 保留:可能用于打印驱动程序。 18H - 保留:在某些系统中,可能用于ROM BASIC。 19H - 保留:可能用于系统启动程序。 1AH - 保留:可能与时钟管理相关。 1BH - 保留:通常与Ctrl+Break键的处理有关。 1CH - 保留:可能与定时处理有关。 1DH - 1FH:保留,通常用于参数指针或其他系统功能。 20H - 0FFH:这部分中断号用于其他硬件和软件中断,如DOS和Windows环境下的系统调用。 0 - 0FFH:软中断,由INT n指令触发,用于执行特定的系统功能或用户定义的服务。 在汇编语言编程中,理解这些中断和异常是至关重要的,因为它们可以帮助开发者正确地处理错误、调试程序以及与操作系统和其他硬件设备进行交互。在80X86汇编语言程序设计中,熟练掌握各种寻址方式、指令、伪指令、中断处理和异常处理机制,是编写高效、可靠的系统级和应用程序的基础。通过实例和练习,学习者可以加深对这些概念的理解,并提高编写汇编代码的能力。