Aula Teórica 6 - w3.ualg.ptw3.ualg.pt/~apcosta/pin/Teoricas/Teorica06.pdf · Capítulos 2 e 3 -...

7
Periféricos e Interfaces Ano lectivo 2003/2004 Docente: Ana Paula Costa 1 Aula Teórica 6 Sumário: 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 á parte sobre a stack A utilidade mais importante da stack é manter um registo de onde as subrotinas foram chamadas e que argumentos lhes foram passados. A stack também pode ser usada para armazenamento temporário de dados, embora isto seja menos comum. Note-se que a stack faz parte da RAM, o processador apenas fornece mecanismos especiais para aceder e manter 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 da stack, obtém-se o elemento lá colocado mais recentemente. A stack pode ser vista como se fosse uma pilha 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 deve recomeçar quando este foi interrompido, porque a chamada mais recente é retornada primeiro. Desta forma, a stack mantém a ordem nos trabalhos dos programas, subrotinas e interrupts handlers, por muito complexos que sejam. A stack tem uma outra particularidade, tem início num endereço de memória mais alto e vai crescendo para 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 para endereços mais baixos, decrementando o valor do registo SP. É preciso não esquecer este detalhe se se quiser trabalhar directamente com a stack. Normalmente, quando um programa é posto em execução é criada uma stack para ele.

Transcript of Aula Teórica 6 - w3.ualg.ptw3.ualg.pt/~apcosta/pin/Teoricas/Teorica06.pdf · Capítulos 2 e 3 -...

Page 1: Aula Teórica 6 - w3.ualg.ptw3.ualg.pt/~apcosta/pin/Teoricas/Teorica06.pdf · Capítulos 2 e 3 - Peter Norton, Peter Aitken e Richard Wilton, PC Programmer´s Bible, Microsoft Press.

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.

Page 2: Aula Teórica 6 - w3.ualg.ptw3.ualg.pt/~apcosta/pin/Teoricas/Teorica06.pdf · Capítulos 2 e 3 - Peter Norton, Peter Aitken e Richard Wilton, PC Programmer´s Bible, Microsoft Press.

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

Page 3: Aula Teórica 6 - w3.ualg.ptw3.ualg.pt/~apcosta/pin/Teoricas/Teorica06.pdf · Capítulos 2 e 3 - Peter Norton, Peter Aitken e Richard Wilton, PC Programmer´s Bible, Microsoft Press.

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.

Page 4: Aula Teórica 6 - w3.ualg.ptw3.ualg.pt/~apcosta/pin/Teoricas/Teorica06.pdf · Capítulos 2 e 3 - Peter Norton, Peter Aitken e Richard Wilton, PC Programmer´s Bible, Microsoft Press.

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.

Page 5: Aula Teórica 6 - w3.ualg.ptw3.ualg.pt/~apcosta/pin/Teoricas/Teorica06.pdf · Capítulos 2 e 3 - Peter Norton, Peter Aitken e Richard Wilton, PC Programmer´s Bible, Microsoft Press.

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);

Page 6: Aula Teórica 6 - w3.ualg.ptw3.ualg.pt/~apcosta/pin/Teoricas/Teorica06.pdf · Capítulos 2 e 3 - Peter Norton, Peter Aitken e Richard Wilton, PC Programmer´s Bible, Microsoft Press.

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;

}

Page 7: Aula Teórica 6 - w3.ualg.ptw3.ualg.pt/~apcosta/pin/Teoricas/Teorica06.pdf · Capítulos 2 e 3 - Peter Norton, Peter Aitken e Richard Wilton, PC Programmer´s Bible, Microsoft Press.

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;}