pts Asked: 2025-03-22 10:38:18 +0800 CST2025-03-22 10:38:18 +0800 CST 2025-03-22 10:38:18 +0800 CST 为什么在切换到保护模式时要设置或者不设置IDT? 772 从实模式切换到 i386 32 位保护模式时,不设置 IDT(即不运行lidt指令)和设置空 IDT 之间有什么实际区别? 哪一个更有用,我应该做哪一个? x86 1 个回答 Voted Best Answer Nate Eldredge 2025-03-22T12:47:28+08:002025-03-22T12:47:28+08:00 没有实际区别。如果您不启用中断或引发任何异常,那么它就毫无意义,因为 CPU 永远不会使用 IDT。如果您这样做,那么这两种情况都会导致失败。 具体来说,当 IDT 为空(限制为 0)时发生的中断或异常将导致三重故障并重置 CPU。如果您未初始化 IDTR,原则上它可能会指向与有效 IDT 非常相似的某个东西,以至于如果发生中断或异常,CPU 实际上会跳转到某个地方,然后您将执行碰巧是垃圾的任何内容。更可能的是,事实并非如此,中断或异常只会像以前一样导致三重故障。 因此在实践中,您必须保持中断禁用,并避免引起任何异常,直到您设置了真正的(非空)中断描述符表。在此之前,您对 IDTR 的操作无关紧要,因此您最好不要费心初始化它。
没有实际区别。如果您不启用中断或引发任何异常,那么它就毫无意义,因为 CPU 永远不会使用 IDT。如果您这样做,那么这两种情况都会导致失败。
具体来说,当 IDT 为空(限制为 0)时发生的中断或异常将导致三重故障并重置 CPU。如果您未初始化 IDTR,原则上它可能会指向与有效 IDT 非常相似的某个东西,以至于如果发生中断或异常,CPU 实际上会跳转到某个地方,然后您将执行碰巧是垃圾的任何内容。更可能的是,事实并非如此,中断或异常只会像以前一样导致三重故障。
因此在实践中,您必须保持中断禁用,并避免引起任何异常,直到您设置了真正的(非空)中断描述符表。在此之前,您对 IDTR 的操作无关紧要,因此您最好不要费心初始化它。