【问题标题】:In which language a BIOS is written?BIOS 是用哪种语言编写的?
【发布时间】:2015-12-28 05:54:49
【问题描述】:

据我了解,ROM 中保存的 BIOS 代码/比特流应该是通用的(与多种 CPU 类型或 ISA 一起使用)。此外,我在网上看到声称有可能转储其代码(并“反汇编”它)的提及。

那么,它是用哪种语言、指令集或机器代码编写的?它不需要任何类型的处理器来执行其操作吗?如果是这样我猜它会使用外部CPU,那么它如何知道所使用的具体指令集?

也许它有一个内部处理器?

【问题讨论】:

    标签: cpu bios disassembly instruction-set


    【解决方案1】:

    主板经过定制以适应给定的指令集,并且 BIOS 固件编写在该指令集的合理子集中(有一点回旋余地)。例如,您不能使用带有 ARM CPU 的 x86 主板(如果有这样的主板,它们必须能够处理多个不同的指令集,更重要的是,系统架构)。

    代码确实在“主”CPU 上运行 - 如果您没有插入 CPU,BIOS 也将无法工作。事实上,如果您想了解更多关于启动过程中最初步骤如何工作的信息,只需选择关于英特尔系统架构的免费书籍(适用于 x86 和朋友)——它将回答您几乎所有的问题,包括更现代的问题诸如“如何启动多线程操作系统”或“如何切换到保护模式”和“如何使 CPU 休眠”等技术。

    例如,早期的 Intel CPU 在地址 0x000FFFF0h 上开始执行。这直接映射到 BIOS ROM(没有复制到 RAM - 它只是一个映射),因此它只是开始执行 BIOS 启动。更现代的 Intel CPU 从不同的地址开始,但基本原理仍然相同。

    现在,较旧的 IBM BIOS 非常简单,并且必须适应很小的内存空间,因此它们通常是用纯汇编编写的(也可能是直接用机器代码编写的,但我认为这没有必要,真的 -虽然我在试验 IBM/Intel PC 架构时已经这样做了)。但是,也有例如例如,完全图形化的 BIOS 系统,可能是用 C 编写的。也就是说,C 的可移植性除了 与汇编相比并没有太大的进步——正如我们所见,拥有一个可移植的 BIOS 并没有多大意义。所有 IBM PC 都在 x86 CPU 上运行。引导的下一步,操作系统加载程序也是如此——它必须适合少量的内存空间,所以它通常是用汇编编写的——然而,在任何比原始 IBM PC 更古老的东西中,他们只是倾向于初始化最小的文件系统“驱动程序”,并从磁盘(软​​盘或硬盘)运行。

    【讨论】:

    • 没错。 BIOS 中的指令是 CPU 在启动时运行的第一个程序,用于为硬件提供标准接口。通常用汇编编写并编译成机器码
    • 那么,您是说典型的主板是完全紧凑的,例如,仅适用于 x86?而且,您所说的“一点回旋余地”是什么意思?
    • @Reflection 您并不真的需要所有指令来处理 BIOS 操作。如果合适的话,两个不同的 Intel CPU 仍然可以工作。
    • 我理解,但问题是关于主板对特定处理器系列的支持。
    • @Reflection 这是相当具体的——部分原因在于不同的架构无论如何都会有不同的套接字,所以拥有一刀切的 BIOS 没有什么意义。但我已经在答案中提到了很多。
    【解决方案2】:

    主板的 BIOS 对该主板极为独特。您要么需要体验英特尔处理器的所有细微差别,要么只需支付一些费用来为您编写 BIOS,这样做的公司非常少,您最好雇用他们。无论哪种方式,都会花费您大量的时间和金钱(如果您雇用他们,会更便宜、更快)。自然,他们最有可能使用 C 和 asm 作为编程语言。非 x86 不使用 bios,他们使用某种引导加载程序(redboot、u-boot 等),所以这确实是 intel/x86 特定的。

    BIOS 在主 x86 处理器上运行。这不是什么神奇的东西,它只是一个为闪存中的主处理器编写的启动程序。

    现在,如果您有 BMC(服务器类机器),那么是的,那可能是与 x86 分开的 arm 处理器,但您知道吗,您得到了相同的人,您付钱来做 bios,然后付钱给他们做你的 bmc 固件也是。出于同样的原因。您将无法在负担得起的时间范围内克服的经验。这里再次很可能是用 C 和 asm 编写的,但除了它们谁知道。

    【讨论】:

      【解决方案3】:

      BIOS(Basic IO System),就像一个新生儿,只知道一些基本的东西,在这种情况下输入输出指令。我相信这些指令是直接用机器代码编写的,以获得最佳性能。我认为在 PC 启动后 BIOS 被复制到 RAM 以加快速度并可能允许更改。 BIOS 是 CPU,而且我相信是特定于架构的。

      【讨论】:

        【解决方案4】:

        BIOS 是硬件部分,它完全是用像“C”语言这样的系统级语言编写的,它通过 1 和 0 位操作,这不过是一个光电压.....

        【讨论】:

          最近更新 更多