Aprendendo sobre memória da BIOS, instruções e origens de código

0

Eu sou aprendendo sobre o BIOS e tenha algumas perguntas.

  1. O que significa "Esses são os últimos 16 bytes de memória no final do primeiro megabyte de memória"?

  2. A primeira instrução do BIOS é jump, que pula para o programa principal do BIOS, mas para onde ele pula?

  3. De onde vem o código original do BIOS?

Também estou interessado em POST? Como os sinais POST são executados pelo processador?

    
por M3taSpl0it 10.02.2010 / 18:55

3 respostas

1

Para responder a segunda pergunta, o bios pula para 0x7c00, que é o início do código do setor de inicialização (concluo que da depuração e criação de bootsectors ...), por sua vez, o setor de inicialização é carregado nesse deslocamento na memória.

O POST é um Power On Self Test, quando as rotinas do BIOS executam uma verificação nos dispositivos de hardware como memória, teclado, disco e tela, emitem um bipe se a verificação falhar dependendo do dispositivo em questão, como se o disco rígido falhar, seus 2 bips, existem variações no bipe para indicar os problemas em questão. Estes são bastante raros, agora que os BIOS são mais confiáveis e que a detecção de hardware é muito mais confiável do que os anteriores ... Os drives MFM / RLL costumavam ser problemáticos com os BIOS, a menos que sejam de um lote incômodo de discos .... Teclados com o BIOS são notórios por exibir 'Hit F1 to continue' se não houver teclados ...

Espero que isso ajude, Cumprimentos, Tom.

    
por 10.02.2010 / 19:18
1
  1. Desloca 0x0ffff0 a 0x0fffff da memória física do computador.
  2. No código da BIOS, que alguém gravou e gravou anteriormente na memória não volátil.
por 10.02.2010 / 19:00
1

@ tommieb75: É aí que o processador eventualmente irá pular, mas somente se o BIOS conseguir localizar um setor de inicialização em um periférico conectado (HDD, unidade Flash USB formatada corretamente, CD El Torito, TFTP de um servidor PXE etc. . Este setor de inicialização terá a assinatura 0x55AA no final dela. O exemplo prototípico é o MBR, que é livre para fazer o que quiser, mas normalmente olha através da tabela de partições para um (e apenas um) sinalizador inicializável, move-se do endereço 0x7C00 (para onde depende do código), carrega primeiro sector dessa partição para 0x7C00 e salta para ele. Este setor de inicialização da partição também deve ter a assinatura 0x55AA.

Quanto à questão original ... não há endereço fixo para o qual o processador é instruído pela BIOS ROM para pular; isso depende do que o autor da BIOS quer. O endereço de 16 bytes abaixo do final de 1 megabyte é apenas algo codificado no próprio processador; este é o comportamento documentado / definido (pela Intel e por associação, AMD e outros). Obviamente, 16 bytes de código não são muito código, então normalmente é apenas um "salto longo" (carregando ambos os registradores de CS e IP) para algum outro lugar na ROM do BIOS. Esse código manipula o POST e o local mencionado acima de um setor de inicialização válido para execução.

    
por 14.06.2010 / 04:10