Aldeia Numaboa
Um portal diferente em Português do Brasil
Informática da Aldeia

Tutoriais

Na Aldeia

Há 108 visitantes online

3630 registros
0 hoje
14 nesta semana
4 neste mês

Boas vindas: flor

Estatística

Membros: 3639
Artigos: 1045
Links: 90
Leituras: 6680891

Login



Kanji da hora




Faça contato






Sáb

26

Mai

2007


16:20

8. O loader Numaboa PDF Imprimir Indique esta página
(6 votos, média 5.0 de 5)
Escrito por vovó Vicki   


Índice do Artigo
8. O loader Numaboa
Identificando o SO Numaboa
Declarando a string
Escrevendo a string
Considerações finais e Comentários
Todas as páginas

Maluco beleza MÓDULO 8 do SO Numaboa

Um loader com apenas um loop infinito foi um bom começo mas, para dizer a verdade, quando o testei pela primeira vez fiquei desconfiada. Será que o setor de boot estava realmente funcionando como pretendido? Numa situação como esta, um dos testes que podem ser efetuados é adicionar algum código que dê saída de um caracter ou de uma string para a tela: se aparecer na tela - funcionou, se não aparecer na tela - deu caca.

Entra aí uma novidade: é preciso saber como dar saída para a tela e a única opção que temos é usar uma das rotinas da BIOS fazendo um chamado de interrupção.

As interrupções da BIOS

As interrupções da BIOS são uma mão na roda. Oferecem uma série de rotinas básicas (daí o nome de Basic Input/Output Services) que podem ser acessadas via interrupções de hardware. Da extensa lista de interrupções disponíveis, a que nos interessa no momento é a INT 10.

A INT 10 é conhecida como Serviços da BIOS para Vídeo (Video BIOS Services). A INT 10 aciona uma porção de rotinas diferentes (mais de 25) dependendo do valor colocado na porção alta do registrador EAX (nos sistemas de 32 bits - AX nos sistemas de 16 bits). INT 10 com AH=00, por exemplo, configura o modo de vídeo; INT 10 com AH=06, rola a página para cima; INT 10 com AH=0C, escreve um pixel gráfico nas coordenadas, etc.

Para uma lista completa das interrupções da BIOS e seus respectivos serviços ou rotinas procure literatura técnica especializada (veja nas considerações finais deste texto). Uma descrição detalhada não faz parte deste tutorial.

A INT 10 com AH=0E

A rotina que nos interessa é a INT 10 com AH=0E, que escreve texto em modo teletipo (modo teletipo é quando o cursor avança uma posição depois de escrever um caracter). Os valores, todos em notação hexadecimal, que podem ser enviados para a BIOS através dos registradores são:

	AH = 0E

	AL = ASCII do caracter que deve ser escrito na porção baixa do
		registrador EAX ou AX (Low = baixa)

	BH = número da página de vídeo (modos texto) na porção alta do
		registrador EBX ou BX (High = alta)

	BL = cor de frente e de fundo dos pixels (modos gráficos) na
		porção baixa do registrador EBX ou BX

	- não há valor de retorno

	- o cursor avança depois da escrita

	- caracteres BEL (07), BS (08), LF (0A), and CR (0D) são
		tratados como códigos de controle

Uma letra na tela

Vamos completar o código do boot loader de loop infinito, escrito no módulo anterior, para colocar uma letra na tela. A letra escolhida será a letra A, cujo ASCII em notação decimal é 65.

[BITS 16]  ; Código de 16 bits
[ORG 0x7C00]  ; Origem do código em 7C00
 
principal:  ; Marcador do início do programa
 
mov ah,0x0E  ; Indica a rotina de teletipo da BIOS
mov al,65    ; O valor ASCII do caracter a ser escrito
mov bh,0x00  ; Número da página de vídeo
mov bl,0x07  ; Atributos do texto (Controla a cor de frente
    ; e a cor de fundo). 07 é texto branco em fundo
    ; preto
int 0x10  ; Chamar a interrupção de vídeo da BIOS
 
pendura:
   jmp pendura  ; O loop infinito
 
; Para terminar
times 510-($-$$) db 0  ; Preenche o resto do setor com zeros
db 0x55,0xAA    ; Põe a assinatura do boot loader no final

Entre o marcador do início do programa e o loop infinito estão algumas instruções MOV para MOVer valores para determinadas porções dos registradores AX e BX. Não se esqueça de que estamos trabalhando com 16 bits. Neste caso, os registradores aceitam apenas 16 bits e recebem o nome de AX, BX, CX, etc. Caso estivéssemos trabalhando com 32 bits, os registradores aceitariam 32 bits e receberiam o nome de EAX, EBX, ECX, etc. Na porção baixa de BX (bl) inserimos o valor 07, que determina texto branco em fundo preto. Você pode tentar outros valores para obter outras combinações de cores.

Conferindo o loader Numaboa

Escreva o código do exemplo e grave-o como loader2.asm (ou outro nome qualquer). Compile-o com o NASM usando nasm.exe -f bin loader2.asm -o loader2.bin ou com o NASM para Windows usando nasmw.exe -f bin loader2.asm -o loader2.bin. Abra o loader2.bin num editor hexadecimal e verifique:

0000 0000    B4 0E B0 41 B7 00 B3 07    CD 10 EB FE 00 00 00 00
0000 0010    00 00 00 00 ...
...
0000 01F0                        ...    00 00 00 00 00 00 55 AA

Se o código compilado estiver ok, transfira-o para o setor de boot de um disquete (você pode formatar o disquete usado anteriormente para reutilizá-lo) e teste-o (como explicado no módulo anterior).



Última atualização ( Dom, 12.04.2009 17:38 )
 

Topo

Topo

Exceto onde especificamente citado, todo material deste site está sob Licença Creative Commons