使用哪种语言编写BIOS?

时间:2015-09-30 12:32:12

标签: cpu bios disassembly instruction-set isa

据我所知,ROM中保存的BIOS代码/比特流应该是通用的(与多种CPU类型或ISA一起工作)。另外,我在网上看到提到有可能转储它的代码(以及“反汇编”它)。

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

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

4 个答案:

答案 0 :(得分:1)

主板是根据给定的指令集量身定制的,BIOS固件是在该指令集的合理子集中编写的(有一些摆动空间)。例如,您不能将x86主板与ARM CPU一起使用(如果有这样的主板,它们必须能够处理多个不同的指令集,更重要的是,系统架构)。

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

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

现在,旧的IBM BIOS非常简单,并且必须适合少量的内存空间,所以它们通常是用纯汇编编写的(也许是机器代码直接编写,但我认为这不是必要的,真的 - 虽然我在尝试使用IBM / Intel PC架构时已经完成了这项工作。但是,也有例如完全图形化的BIOS系统,例如,可能用C语言编写。也就是说,C的装配除了之外,其便携性并没有太大提升 - 正如我们所看到的那样,拥有可移植的BIOS并没有多大意义;所有IBM PC都运行在x86 CPU上。同样适用于启动的下一步,OS加载器 - 它必须适合少量的内存空间,所以它通常用汇编编写 - 但是,在比原始IBM PC稍微不那么古老的东西中,它们只是倾向于初始化最小的文件系统“驱动程序”,并从磁盘(软​​盘或硬盘驱动器)运行。

答案 1 :(得分:0)

BIOS是硬件部分,它完全用系统级语言编写,如'C'语言,它以1和0位运行,这只不过是电压......

答案 2 :(得分:0)

主板的BIOS是该主板非常独特的。您要么需要英特尔处理器的所有细微差别的经验,要么只需支付一些费用来为您编写BIOS,有一个非常小的公司列表可以做到这一点,您最好只雇用它们。无论如何,这将花费你很多时间和金钱(如果你雇用它们会更便宜和更快)。当然,他们最有可能使用C和asm作为编程语言。非x86不使用bios他们使用某种类型的引导加载程序(redboot,u-boot等),所以这真的是intel / x86特定的。

bios在主x86处理器上运行。它不仅仅是为闪存中的主处理器编写的启动程序。

现在,如果你有BMC(服务器类机器),那么是的,这可能是一个独立于x86的arm处理器,但是你知道吗,你得到了你付的那些人来做bios并付钱给他们做你的bmc固件也是。出于同样的原因。在经济实惠的时间框架内无法克服的经验。这里也很可能用C和asm写的,但谁知道除了他们。

答案 3 :(得分:0)

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