Questão:
Em que idioma o BIOS está escrito?
Reflection
2015-09-30 17:36:06 UTC
view on stackexchange narkive permalink

Pelo que entendi, o código BIOS / fluxo de bits mantido na ROM deve ser genérico (trabalhar junto com vários tipos de CPU ou ISAs). Além disso, vi menções na web que afirmam ter a possibilidade de despejar seu código (e ' desmontá-lo ').

Então, em qual idioma, conjunto de instruções ou código de máquina está escrito? Não precisa de nenhum tipo de processador para realizar suas operações? Se sim eu acho que ele usará a CPU externa, então como ele conhece o conjunto de instruções específicas da CPU empregada?

Talvez tenha um processador interno?

O código BIOS é muito * não * genérico, ele só funcionará com um conjunto de instruções específico. Isso costumava ser (para PCs) o conjunto de instruções de modo real x86 de 16 bits. UEFI é x86_32 ou x86_64, um ou outro.
Acredito que fazer literalmente a mesma pergunta em dois sites de troca de pilha ao mesmo tempo é desaprovado em geral. Certamente acho que provavelmente é uma má ideia. http://programmers.stackexchange.com/questions/298628/which-language-is-a-bios-written-in
Dois respostas:
Jason Geffner
2015-09-30 18:06:33 UTC
view on stackexchange narkive permalink

Então, em qual linguagem, conjunto de instruções ou código de máquina está escrito?

É escrito em uma linguagem que pode ser compilada para um código de máquina que pode ser executado pelo processador (a CPU). Normalmente, é uma combinação de C e linguagem assembly.

Não precisa de nenhum tipo de processador para realizar suas operações?

Sim, o processador é o que executa o código do BIOS.

Se for assim, acho que usará a CPU externa

Correto.

então como ele conhece o conjunto de instruções específico daquele empregado?

Não conhece. É por isso que, ao comprar uma placa-mãe, você precisa ter certeza de comprar uma compatível com a CPU que planeja usar com ela. Veja, por exemplo, lista de placas-mãe da ASUS. Eles têm placas-mãe destinadas a CPUs Intel, placas-mãe destinadas a CPUs AMD, etc. E se você se aprofundar nas especificações de uma determinada placa-mãe, verá com quais CPUs específicas ela deve funcionar:

CPUs

Por outro lado, bytecode EFI.
Espere um minuto. Você poderia dar alguma evidência de que um BIOS pode ser escrito em C? Pelo que entendi, um BIOS de hardware deve ser puro assembler que possa rodar nativamente na máquina, sem compilar ou traduzir. Talvez haja alguma distinção entre os diferentes tipos de BIOS que você possa examinar se eu não estiver entendendo isso corretamente.
@Erik A BIOS que você executa em seu computador está em montagem e pode ser executada diretamente, mas pode ser desenvolvida em qualquer linguagem que possa ser compilada em montagem.
Ah, você disse isso, eu simplesmente perdi, pois tinha um conceito diferente de "linguagem em que um BIOS é escrito".
@bjb568: Isso é um pouco pedante, mas ... o código BIOS que você executa em seu computador é, na verdade, um código de máquina, não um assembly. [O primeiro é "binário", enquanto o último é um texto legível.] (Http://stackoverflow.com/a/466811)
Ah, acho que está certo. Mas você pode traduzir o código de máquina em assembly e vice-versa facilmente, certo?
Normalmente, sim.
@bjb568: Pela sua definição de "montagem", todos os programas nativos são escritos em montagem. Se for escrito em C, será compilado em linguagem de máquina, portanto C é assembly. Se for escrito em Pascal, será compilado em linguagem de máquina, então Pascal é assembly. Mesmo com go, FORTRAN, COBOL etc.
Fernando Gonzalez Sanchez
2016-01-14 04:34:03 UTC
view on stackexchange narkive permalink

Como resposta complementar, o BIOS costumava ser escrito em assembler (agora é principalmente código ANSI C) que compila para

a) Código de máquina para arquiteturas antigas (no passado, como PC IBM; que era na verdade, escrito em assembler de acordo com https://sites.google.com/site/pcdosretro/ibmpcbios e um livro antigo de Gottfried em Assembler for PC IBM).

b) Bytecode UEFI para EFI atualmente (substituição de BIOS).

Como evidência, dê uma olhada em https://en.wikipedia.org/wiki/Coreboot & http: //review.coreboot.org/gitweb?p=coreboot.git;a=tree

(Observe que há vários outros esforços de código aberto em substituições de BIOS / EFI).

UEFI É uma especificação de um framework com várias camadas, expondo, entre outras coisas, serviços, um console de shell e uma camada de interpretador (para código de bytes EFI), a ideia de abstrair "BIOS" do código de máquina era para facilitar a portabilidade para outras arquiteturas não x86 (Itanium, ARM, etc)

Esta é uma boa introdução conceitual o n UEFI http://www.amazon.com/Beyond-Bios-Implementing-Extensible-Interface/dp/0974364908/ref=sr_1_2?ie=UTF8&qid=1452724127&sr=8-2&key=efi+bios

PS. Em uma empresa em que trabalhei, na verdade tive acesso à base de código BIOS / EFI.



Estas perguntas e respostas foram traduzidas automaticamente do idioma inglês.O conteúdo original está disponível em stackexchange, que agradecemos pela licença cc by-sa 3.0 sob a qual é distribuído.
Loading...