BIOS 是用哪种语言编写的?

逆向工程 拆卸 倾倒 BIOS
2021-06-21 02:21:43

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

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

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

2个回答

那么,它是用哪种语言、指令集或机器代码编写的?

它是用一种可以编译成可由处理器(CPU)执行的机器代码的语言编写的。通常,它是 C 语言和汇编语言的组合。

它不需要任何类型的处理器来执行其操作吗?

是的,处理器就是运行 BIOS 代码的地方。

如果是这样,我猜它会使用外部 CPU

正确的。

那么它是如何知道被雇佣者的具体指令集的呢?

它没有。这就是为什么当您购买主板时,您需要确保购买与您计划使用的 CPU 兼容的主板。例如,请参阅华硕的主板列表他们有适用于 Intel CPU 的主板、适用于 AMD CPU 的主板等。如果您深入了解给定主板规格,您将看到它适用于哪些特定 CPU:

中央处理器

作为补充答案,BIOS 过去是用汇编程序编写的(现在主要是 ANSI C 代码),它编译为

a) 旧架构的机器代码(过去,如 PC IBM;实际上是根据https://sites.google.com/site/pcdosretro/ibmpcbios和 Gottfried 在 Assembler for PC IBM 中的一本旧书用汇编编写的)。

b) 当前用于 EFI 的 UEFI 字节码(BIOS 替换)。

作为证据,请查看https://en.wikipedia.org/wiki/Coreboot & http://review.coreboot.org/gitweb?p=coreboot.git;a=tree

(请注意,在 BIOS/EFI 替换方面还有其他一些开源工作)。

UEFI 是一个具有多层框架的规范,其中公开了服务、shell 控制台和解释器层(用于 EFI 字节代码),将“BIOS”从机器代码中抽象出来的想法是为了便于移植到其他非x86 架构(Itanium、ARM 等)

这是关于 UEFI 的一个很好的概念介绍http://www.amazon.com/Beyond-Bios-Implementing-Extensible-Interface/dp/0974364908/ref=sr_1_2?ie=UTF8&qid=1452724127&sr=8-2&keywords=efi+bios

附注。在我曾经工作过的一家公司,我实际上可以访问 BIOS/EFI 代码库。