有没有办法以编程方式获取当前系统上存在的所有 BIOS 中断的列表?

Is there a way to get the list of all BIOS interrupts present on the current system programmatically?

我正在查找我的 PC 提供的 BIOS 中断列表。

要获得最常见的 BIOS 调用,有各种 public 资源,但我希望获得我的 PC 的所有(可能不是很多 public)BIOS 调用的列表。

有没有程序可以做到这一点,或者我可以用任何方式编写一个程序(最好是汇编语言或 C 语言)?

我的目标是避免 BIOS 反汇编。我也知道 BIOS 在它们的低级别 API 中相对相似,因此 API 调用列表也相似。

"Ralf Brown's interrupt list" 可能对您有所帮助。

该站点列出了 x86 系统上最常用的中断:

不仅列出了BIOS中断,还列出了MS-DOS中断和普通程序使用的中断。这包括列出 Linux 系统调用(中断 0x80)的部分。

... i.e. please don't include ...

不幸的是,您必须将 "common" BIOS 中断分开,中断仅存在于某些 BIOS 中,而 MS-DOS 中断您自己。

但是,对于许多中断,列表显示如下内容:"Only present in BIOSes made by Example Software Inc."

... my recent edit ...

如果我没理解错的话,你想要某种 API 来告诉你某个系统上存在哪些中断。

很遗憾,这样的 API 不存在:

BIOS 不一定是一个单独的软件。相反,一些硬件组件(例如显卡)可能有自己的固件。

此类组件的固件通常没有自己的中断,但它可以通过更改中断向量来向 BIOS 中断添加功能。

显卡的固件可能会通过改变中断向量将函数AX=5678h添加到int 10h,使其指向以下代码段:

new_int_10_vector:
    cmp ax, 5678h
    je new_function

    ; (In reality, the next line is not as simple as shown here)
    jmp original_int_10_vector

new_function:
    ; Perform the "new" function "AX=5678h" of "int 10h"
    ; ...
    iret

如果现代 BIOS 供应商想要引入一个列出所有支持功能(您正在寻找的功能)的功能,他们就会遇到问题:

BIOS应该如何检测到显卡固件在int 10h上增加了附加功能AX=5678h