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