【问题标题】:What does "BIOS Interrupt call" mean“BIOS 中断调用”是什么意思
【发布时间】:2014-10-29 23:32:18
【问题描述】:

我有三个仅适用于 x86 架构的主要问题,因为我是 intel 80386 微芯片的用户。

这些是我知道的基础知识:中断表从地址 0x0000 开始,因此 int 0x01 指令将搜索地址 0x0001。然后处理器将看到包含在位置 0x0001 中的地址,并期望中断处理程序 0x01 在 0x0001 指向的地址处开始。

所以我的第一个问题是,中断处理程序如何指示自己的结束并告诉 cpu 返回到发出中断的进程。该指标是只有NULL,还是有一个特殊的值来表示处理程序已经完成?

第二个问题:在MS-DOS中,硬件中断0x19是用来重启计算机的。我想知道这个中断的处理程序在哪里。它在 BIOS ROM 中,这就是为什么它被称为“BIOS 中断调用”吗?请向我解释这个术语。此外,由于 MS-DOS 中断 0x21 包含 MS-DOS 功能(如获取和打印字符),它在 RAM 中而不是 BIOS 中,对吗?这是否意味着它不是 BIOS 中断?

最后,我想知道我是否加载了一个带有 16 进制 99 中断的中断表,这意味着 0x99 是最后一个,如果用户执行 0x9A(比 0x99 多一个)会发生什么?

请回答我的这三个问题,因为这些天我非常喜欢系统编程。如果它太长和复杂,我很抱歉。 提前谢谢!

【问题讨论】:

    标签: x86 interrupt dos bios


    【解决方案1】:

    在实模式下,中断表中的每个条目都是 4 个字节长,2 个字节用于地址的段部分,2 个字节用于偏移量。这意味着中断处理程序 0x01 的地址位于地址 0x0:0x0004。中断处理程序通常通过执行IRET 指令返回中断发生的位置。这会弹出中断发生时 CPU 在堆栈中保存的 FLAGS 寄存器的地址和值。

    中断 0x19 的处理程序通常会指向 BIOS ROM 中的某个位置,但也有可能是某些东西钩住了中断并将其指向了 RAM 中的处理程序。 MS-DOS 中断 0x21 通常指向 RAM 中的位置,尽管有一些版本的 MS-DOS 位于 ROM 中。

    在实模式下,中断表通常没有限制,因此所有 256 个可能的条目都存在,无论是否已将有用的值加载到所有条目中。当中断发生时,CPU 将在它在表中找到的任何地址开始执行指令。通常,如果地址不是中断处理程序的位置,这将导致崩溃。

    【讨论】:

    • 很好的解释。但是,中断处理程序 0x01 的指针从 0x0:0x0001 开始并在 0x0:0x0004 结束,对吗?如果是这样,您是说如果用户执行 int 0x02,CPU 将在地址 0x0:0x0005(直到 0x0:0x0008)中搜索指向中断处理程序的指针?实际上,我想知道,由于地址是 x86 中的双字值,正如您所说,我们将通过什么地址引用从位置 0x0:0x0005 开始的双字值?请解释一下。
    • 不,中断处理程序 1 的条目长 4 个字节,第一个字节是地址 0000:0004,第二个字节在 0000:0005,第三个在 0000:0006,最后一个在 0000:00070000:0000 - 0000:0003 的字节构成了中断处理程序 0 的入口。中断处理程序 2 的入口位于 0000:0x0008 - 0000:0x000B。在表中构成条目的四个字节是一个双字值,它是处理程序的地址。
    • 非常感谢。我得到了整件事(终于)。顺便说一句,我在我的虚拟机上写这个!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-12
    • 1970-01-01
    • 2017-10-25
    • 1970-01-01
    • 1970-01-01
    • 2011-08-12
    • 2017-06-11
    相关资源
    最近更新 更多