Aula Teórica 6 - w3.ualg.ptw3.ualg.pt/~apcosta/pin/Teoricas/Teorica06.pdf · Capítulos 2 e 3 -...
Transcript of Aula Teórica 6 - w3.ualg.ptw3.ualg.pt/~apcosta/pin/Teoricas/Teorica06.pdf · Capítulos 2 e 3 -...
Periféricos e Interfaces Ano lectivo 2003/2004Docente: Ana Paula Costa
1
Aula Teórica 6
Sumár io:A stack. O DMA. O software ROM-BIOS.O sistema operativo, a BIOS e a organização da memória.Instruções para a programação de periféricos e interfaces na linguagem C.
Leitura Recomendada:Capítulos 1 e 6 - Hans-Peter Messmer, The Indispensable PC Hardware Book, Addison-Wesley.Capítulos 2 e 3 - Peter Norton, Peter Aitken e Richard Wilton, PC Programmer´s Bible, Microsoft Press.
Um á par te sobre a stack
A utilidade mais importante da stack é manter um registo de onde as subrotinas foram chamadas e queargumentos lhes foram passados. A stack também pode ser usada para armazenamento temporário dedados, embora isto seja menos comum.
Note-se que a stack faz parte da RAM, o processador apenas fornece mecanismos especiais para aceder emanter este espaço. A stack opera em LIFO (Last In Fist Out) e tem duas instruções principais: Pop off,para retirar elementos da stack, e push on para colocar dados na stack. Quando se faz pop de um item dastack, obtém-se o elemento lá colocado mais recentemente. A stack pode ser vista como se fosse umapilha de pratos.
Figura nº 1 – Funcionamento da stack.
Esta organização LIFO é ideal quando a stack é usada para se saber em que ponto do programa se deverecomeçar quando este foi interrompido, porque a chamada mais recente é retornada primeiro. Destaforma, a stack mantém a ordem nos trabalhos dos programas, subrotinas e interrupts handlers, por muitocomplexos que sejam.
A stack tem uma outra particularidade, tem início num endereço de memória mais alto e vai crescendopara baixo. O início (bottom) da stack é sempre um endereço maior ou igual do que o topo da stack. Àmedida que se vai acrescentando dados à stack, a localização do topo da stack vai-se movendo paraendereços mais baixos, decrementando o valor do registo SP. É preciso não esquecer este detalhe se sequiser trabalhar directamente com a stack.
Normalmente, quando um programa é posto em execução é criada uma stack para ele.
Periféricos e Interfaces Ano lectivo 2003/2004Docente: Ana Paula Costa
2
O DMA – Direct Memory Access
O chip DMA permite troca de dados entre os periféricos e a memória RAM, directamente, sem passarpelo CPU. O DMA liberta o processador da tarefa morosa de transferir grandes volumes de dados. ODMA estabelece uma segunda via de comunicação entre o periférico e a RAM.
Figura nº 2 – DMA no PC.
O CPU transfere dados de um periférico para um dos seus registos internos e do registo para a RAM(também pode ser feito o caminho na direcção oposta). Existindo DMA, o controlador DMA emite ossinais de controlo e o endereço de memória, e o periférico acede directamente à RAM. Assim, o CPU ficalivre da tarefa de transferir dados, e pode executar outros processos.
O software ROM
O software ROM é composto por três partes:1. Rotinas de start-up, que permitem o arranque do PC.2. ROM-BIOS (conjunto de rotinas que fornecem serviços para operar os vários dispositivos do PC).3. Extensões ROM (rotinas adicionadas à ROM principal, quando determinado equipamento é
acrescentado ao computador.
Porquê motivo este software se encontra na ROM?Porque este software constitui o suporte básico para outros programas e estando permanentementegravado na ROM, está no próprio sistema.
Vamos de seguida ver cada uma das três partes do software ROM.
• Rotinas de start-up
O primeiro trabalho do software ROM é supervisionar o arranque do computador. As rotinas de start-uprealizam as seguintes tarefas:1. Teste de fiabilidade do computador, para ver se tudo está a funcionar correctamente.2. Inicialização de chips e equipamento standard. Determina que equipamento está ligado no PC e
coloca essa informação em localizações standard de memória (endereços 0040H:0000 a0040H:00FFH).
3. Inicialização da tabela de interrupções. Coloca na tabela de interrupções (zona de memória 00000H a003FFH – 1024 bytes) os valores por defeito que apontam para cada interrupt handler, que estãoguardados na ROM-BIOS.
4. Verificação da existência de equipamento adicional e de extensões ROM. Consiste de um conjuntode rotinas que procuram por novo equipamento e extensões ROM (placas ROM adicionais que
Periféricos e Interfaces Ano lectivo 2003/2004Docente: Ana Paula Costa
3
aumentam ou substituem as funções originais da BIOS). Caso existem, é-lhes passado o controlomomentaneamente para que se possam auto-inicializar.
5. Carregamento do sistema operativo a partir do disco (bootstrap loader). A parte final do start-upconsiste em chamar a interrupção 19H (bootstrap loader) que tenta carregar para memória umprograma de boot de um disco (drive a ou disco rígido). Se o programa de boot é carregado comsucesso para memória é-lhe passado o controlo do computador, caso contrário, é mostrada umamensagem de erro.
• ROM-BIOS (ou apenas BIOS – Basic Input/Output System)
A BIOS está localizada na ROM e fornece um conjunto de serviços fundamentais que são necessáriospara a operação do processador e dos seus periféricos. A BIOS controla os periféricos do PC, tais como oteclado, os drives de discos, o vídeo, as impressoras, etc..
Conceptualmente, os serviços ROM-BIOS encontram-se entre os programas que são executados na RAM(incluindo o sistema operativo) e o hardware. Por um lado, a BIOS recebe pedidos dos programas pararealizar serviços de E/S standard. Um programa invoca tais serviços chamando uma interrupção desoftware. No outro lado, a BIOS comunica com os dispositivos periféricos.
A BIOS é importante porque permite que os programas corram sem problemas em PC´s comconfigurações de hardware diferentes. Evita problemas de incompatibilidade dos programas.
A área de dados da BIOS
A ROM-BIOS usa os 256 bytes localizados desde o endereço 0040H:0000H a 0040H:00FFH como áreade dados para as suas rotinas de teclado, vídeo, disco, impressora e comunicações. Os dados sãocolocados nesta área de memória durante o start-up. O sistema operativo também utiliza esses dados nassuas rotinas e nos nossos programas também os podemos aceder.
Exemplos de informação existente na área de dados da BIOS:0040H:0010H – lista de equipamento detectado pela BIOS (2 bytes).0040H:0013H – tamanho de memória base disponível (2 bytes).0040H:0017H – estado do teclado (2 bytes)
• Extensões ROM
Pelo facto de a ROM-BIOS original não incluir programas de suporte para hardware adicional, existe apossibilidade de acrescentar extensões ROM. Estes módulos têm a possibilidade de substituir rotinas pré-existentes da BIOS pelas suas próprias, que são colocadas em zonas específicas.
O sistema operativo, a BIOS e a organização da memór ia
• O papel do sistema operativo
A única função do bootstarp loader da ROM é ler o programa boot do disco, colocá-lo na memória etransferir-lhe o controlo do computador.
No caso do sistema operativo MS-DOS, se existirem dois ficheiros escondidos no disco, então este éconsiderado disco de arranque no MS-DOS. O io.sys e o msdos.sys são esses ficheiros. Se o programaencontra estes dois ficheiros carrega-os para memória juntamente com o interpretador de comandos doMS-DOS, o ficheiro command.com.
O ficheiro io.sys contem extensões da ROM-BIOS que constituem melhoramentos às rotinas BIOSexistentes. Basta alterar os vectores das interrupções das rotinas BIOS para que estas fiquem a apontarpara a localização de memória onde se encontra a nova rotina.
O msdos.sys contem os serviços do MS-DOS, que podem ser chamados pelos programas através de umainterrupção de software. A interrupção 21H é particularmente importante porque dá acesso a um grandegrupo de funções DOS.
Periféricos e Interfaces Ano lectivo 2003/2004Docente: Ana Paula Costa
4
O command.com é o interpretador de comandos do DOS e o que faz é interpretar e executar os comandosescritos na linha de comandos do sistema operativo. Alguns comandos são internos ao command.com,outros são externos e encontram-se em ficheiros à parte.
• BIOS versus MS-DOS
O MS-DOS disponibiliza serviços que são melhoramentos das funções BIOS, para tornar determinadasoperações mais eficientes. A BIOS e o DOS vêem os dispositivos de forma diferente. Por exemplo, aBIOS vê o disco rígido com um conjunto de pistas, sectores, etc., enquanto o DOS vê-o como grupos deficheiros e directorias.
Quando utilizar BIOS ou DOS?
Quando temos hipótese de opção, devemos basear a nossa escolha com base na situação que queremosresolver. Há situações em que é melhor trabalhar com a BIOS e outras em que é melhor trabalhar com oDOS. No decorrer das aulas vamos falando sobre as escolhas acertadas.
• O acesso ao hardware
Figura nº 3 – O acesso ao hardware
Existem basicamente três formas de aceder ao hardware: usar os serviços da BIOS, os serviços do sistemaoperativo, ou aceder directamente.
Podendo comunicar com o hardware, porquê usar intermediário?• Programação menos complicada.• São rotinas standard que podem ser encontradas em qualquer PC.• programa fica isolado das propriedades físicas do hardware, evitando problemas de compatibilidade.
Atenção: Nem todas as tarefas são suportadas pela BIOS e pelo sistema operativo, e nesse caso temos queaceder directamente ao hardware.
Periféricos e Interfaces Ano lectivo 2003/2004Docente: Ana Paula Costa
5
• Layout da memória
Resumindo, vamos ver agora um esquema que representa a forma como a memória é organizada.
Figura nº 4 – Layout a memória
Instruções para a programação de perifér icos e inter faces na linguagem C
• Tipos de dados
unsigned char; /* BYTE * /unsigned int; /* WORD * /unsigned long; /* DWORD * /
• Valores em hexadecimal (0x)
Exemplos:16 em decimal, 0x10 em hexadecimal10 em decimal, 0xA em hexadecimal
• Acesso à memória – (instruções incluídas na biblioteca dos.h)
Instrução peek – lê uma word da memória.int peek (unsigned segment, unsigned offset);
Instrução peekb – lê um byte da memória.char peekb (unsigned segment, unsigned offset);
Instrução poke – escreve uma word na memória.void poke (unsigned segment, unsigned offset, int valor);
Periféricos e Interfaces Ano lectivo 2003/2004Docente: Ana Paula Costa
6
Instrução pokeb – escreve um byte na memória.void pokeb (unsigned segment, unsigned offset, char valor);
• Acesso aos portos – (instruções incluídas na biblioteca dos.h)
Instrução inport – lê um valor do porto especificado.unsigned inport (unsigned numero_porto);
Instrução inportb – lê um byte do porto especificado.unsigned char inportb (unsigned numero_porto);
Instrução outport – envia um valor para o porto especificado.void outport (unsigned numero_porto, unsigned valor);
Instrução outportb – envia um byte para o porto especificado.void outportb (unsigned numero_porto, unsigned char valor);
• Chamada de interrupções (instruções incluídas na biblioteca dos.h)
Instrução int86 – chama uma interrupção de software (BIOS ou Dos).int int86 (int numero_interrupção, union REGS *inregs, union REGS *outregs);
Instrução int86x – chama uma interrupção de software extendida (BIOS ou Dos).int int86x (int numero_interrupção, union REGS * inregs, union REGS *outregs, struct SREGS*segregs);
Instrução intdos – chama uma interrupção Dos.int intdos (union REGS *inregs, union REGS *outregs);
Instrução intdosx – chama uma interrupção Dos extendida.int intdosx (union REGS * inregs, union REGS *outregs, struct SREGS *sregs);
Cada interrupção tem as suas regras de utilização e o seu modo de funcionamento. Iremos aprendendo aospoucos.
• Estruturas pré definidas envolvidas (estão definidas nos ficheiros dos.h e bios.h)
struct WORDREGS {unsigned int ax, bx, cx, dx, si, di, cflag, flags;
}
struct BYTEREGS {unsigned char al, ah, bl, bh, cl, ch, dl, dh;
}
union REGS {struct WORDREGS x;struct BUTEREGS h;
}
struct SREGS {unsigned int es;unsigned int cs;unsigned int ss;unsigned int ds;
}
Periféricos e Interfaces Ano lectivo 2003/2004Docente: Ana Paula Costa
7
• Assembly com o C
Por vezes é necessário escrever código Assembly num programa em C, por exemplo, quando umainterrupção utiliza o registo BP, que não consta de nenhuma das estruturas pré definidas.
Para o fazer:
asm instrução_em_assembly;
ou, se forem várias intruções:
asm{
instruções_em_assembly;}