sexta-feira, 4 de fevereiro de 2011

Dentro do Microprocessador

3.2 Dentro do Microprocessador

Para entendermos como funciona um microprocessador, vamos ver como é ele por dentro e tentar perceber a lógica usada para a sua criação.

O microprocessador executa toda uma série de instruções que lhe dizem o que deve fazer. Baseado nas instruções que lhe são dadas, ele executa três coisas básicas através da sua Unidade Aritmética e Lógica (ALU):

  • O microprocessador executa as principais operações matemáticas. Os microprocessadores mais recentes, têm internamente um coprocessador aritmético, cuja função é auxiliar na execução de operações complexas com vírgula flutuante.
  • O microprocessador move dados de uma localização de memória para outra.
  • O microprocessador pode tomar decisões e saltar para um conjunto de instruções baseado nessas decisões.

Apesar de, como nós sabemos, um processador poder executar todo o tipo de operações altamente sofisticadas, estas são as suas três actividades básicas. Na figura 3.2 podemos ver um diagrama de blocos de um microprocessador extremamente simples, mas capaz de executar as três funções básicas acima referidas.

FIGURA 3.2 – Diagrama de blocos de um processador

Este microprocessador é o mais simples que se possa imaginar, tendo, no entanto:

  • Um barramento de endereços, que pode ter um tamanho de 8, 16 ou 32 bits e está encarregado de enviar endereços para a memória.

  • Um barramento de dados, que também pode ter 8, 16 ou 32 bits e pode receber e enviar dados de e para a memória.

  • Uma linha RD (read) e uma WR (write), que diz à memória quando escrever ou ler determinado endereço de memória.

  • Uma linha clock, que é o relógio que controla o processador.

  • Uma linha de reset, que coloca a zero o contador de programa e recomeça a execução.

Já falámos de barramento de dados e endereços, assim como linhas RD e WR. Estes barramentos e linhas ligam à memória, seja ela RAM ou ROM. No caso do nosso processador, se tivermos um barramento de endereços de 8 bits e um barramento de dados de 8 bits, isso quer dizer que ele pode endereçar 256 bytes de memória, isto é 28=256, e pode ler ou escrever 8 bits de memória simultaneamente.

Como certamente sabem, ROM é a sigla de Read Only Memory. Na ROM está armazenado um conjunto de instruções e microcódigo que será executado pelo processador. O barramento de endereços diz à ROM que bytes deve colocar no barramento de dados e isso é feito quando a linha RD muda de estado.

Já que estamos a falar de memórias, não podemos esquecer a RAM, sigla de Random Acess Memory. A RAM contém bytes de informação e o processador pode ler essa informação, ou escrever, dependendo do estado biolágico das linhas RD ou WR. O problema da RAM é perder toda a informação armazenada quando se desliga a alimentação, daí a necessidade da ROM.

Mesmo o mais simples processador necessita de uma enorme quantidade de instruções para realizar a mais simples operação. Essas instruções estão armazenadas na ROM como conjunto de bits. Esses bits são imperceptíveis para nós como tal, sendo “traduzidos” por um assemblador para linguagem assembly e novamente transformados em conjuntos de bits e colocados na memória para serem executados pelo processador.

Podemos agora ver no exemplo seguinte o aspecto de um programa em assembly para o nosso processador:

/ / a está colocado no endereço 128

/ / f está colocado no endereço 129

0 CONB 1 / / a = 1 ;

1 SAVEB 128

2 CONB 1 / / f = 1 ;

3 SAVEB 129

4 LOADA 128 / / if a > 5 then jump to 17;

5 CONB 5

6 COM

7 JG 17

8 LOADA 129 / / f = f * a;

9 LOADB 128

10 MUL

11 SAVEC 129

12 LOADA 128 / / a = a + 1 ;

13 CONB 1

.14 ADD

15 SAVEC 128

16 JUMP 4 / / loop back to if ;

17 STOP

Vejamos agora o significado das instruções usadas e mais algumas que são aplicáveis ao nosso processador - tabela 3.2 – Tabela de instruções

Instrução

Significado

LOADA mem

Carrega o registo A do endereço de memória

LOADAB mem

Carrega o registo B do endereço de memória

CONB com

Carrega um valor constante para o registo B

SAVEB mem

Guara o registo B num endereço de memória

SAVEC mem

Guarda o registo C num endereço de memória

ADD

Adiciona A e B e guarda o resultado em C

SUB

Subtrai A e B e guarda o resultado em C

MUL

Multiplica A e B e guarda o resultado em C

DIV

Divide A e B e guarda o resultado em C

COM

Compara A e B e guarda o resultado em test

JUM addr

Salta para o endereço

JEQ addr

Se igual, salta para um endereço

JNEQ addr

Se diferente, salta para um endereço

JG addr

Se maior do que, salta para um endereço

JGE addr

Se maior ou igual que, salta para um endereço

JL addr

Se menor do que, salta apara um endereço

JLE addr

Se menor ou igual que, salta para um endereço

STOP

Pára a execução

Sem comentários:

Enviar um comentário