quarta-feira, 2 de fevereiro de 2011

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