据我了解,ROM中保存的BIOS代码/位流应该是通用的(与多个CPU类型或ISA一起使用)。此外,我在网络上看到有人提到有可能转储其代码(并“反汇编”)该代码。 ?它不需要任何类型的处理器来执行其操作吗?如果是这样,我想它将使用外部CPU,那么它如何知道所使用的CPU的特定指令集?

也许它具有内部处理器?

评论

BIOS代码不是通用的,它仅适用于特定的指令集。 (对于PC而言)以前是16位x86实模式指令集。 UEFI是x86_32或x86_64,一个或另一个。

我相信,在两个堆栈交换站点上同时问字面上相同的问题通常是不赞成的。当然,我认为这可能不是一个好主意。 developers.stackexchange.com/questions/298628 / ...

#1 楼


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


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


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


是的,处理器就是运行BIOS代码的计算机。


如果是这样,我想它将使用外部CPU

正确。


那么如何知道所使用的特定指令集呢?


却不知道。因此,在购买主板时,需要确保购买与计划使用的CPU兼容的主板。例如,请参阅华硕的主板列表。他们有用于Intel CPU的主板,用于AMD CPU的主板等。如果深入研究给定主板的规格,您将看到它可以与哪些特定CPU配合使用:



评论


另一方面,EFI字节码。

–霍布斯
2015年9月30日15:11在

等一下。您能否提供一些支持性证据证明BIOS可以用C编写?据我了解,硬件BIOS必须是纯汇编程序,可以在计算机上本机运行,而无需编译或翻译。如果我不能正确理解的话,可能会在不同种类的BIOS之间有所区别。

– ErikE
2015年9月30日在16:02

@Erik您在计算机上运行的BIOS处于组装状态,可以直接运行,但是可以使用可以编译为汇编语言的任何语言进行开发。

– bjb568
2015年9月30日在16:07

嗯,您确实说过,我只是想念它,因为我有一个不同的概念:“ BIOS语言被写入”。

– ErikE
2015年9月30日在16:09

@ bjb568:这有点花哨,但是...您在计算机上运行的BIOS代码实际上是机器代码,而不是汇编代码。前者是“二进制”,而后者是人类可读的文本。

–詹森·格夫纳(Jason Geffner)
2015年9月30日16:19



#2 楼

作为补充性答案,BIOS以前是用汇编器(现在主要是ANSI C代码)编写的,它可以编译为

a)用于旧体系结构的机器代码(过去,例如PC IBM;实际上是编写的)根据https://sites.google.com/site/pcdosretro/ibmpcbios以及来自Gottfried的一本旧书,在PC的Assembler中使用。)b)当前用于EFI的UEFI字节码(BIOS更换) )。

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

(请注意,还有其他一些开放源代码的工作可以替代BIOS / EFI)。

UEFI是具有多个层次的框架的规范,除其他外还进行了公开服务,外壳程序控制台和解释程序层(用于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

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