Inspirado pelos últimos artigos que escrevi sobre o microcontrolador 8051, em que apresento alguns conceitos gerais sobre arquitetura, resolvi escrever este artigo com objetivo de demonstrar como um microprocessador básico funciona. Para isso, vou recorrer a um material de referência que utilizei a tempos atrás, quando estava iniciando o curso de engenharia de computação, e que naquela época modificou de forma significativa a minha visão sobre a operação de um processador básico.
Apresentação
Em relação ao processador, será apresentado o SAP-1, proposto por Alberto Paul Malvino em seu livro sobre Microprocessadores e Microcontroladores. O acrônimo SAP, em inglês, significa Simples as Possible, isto é, Simples quanto Possível. O livro que li era bem antigo, de 1985, e não sei se novas edições foram publicadas ou se o SAP-1 foi apresentado em outros títulos do autor. Assim sendo, o projeto que será apresentado neste artigo utilizará o simulador de circuitos lógicos Logisim.
Arquitetura do SAP-1
O SAP-1 possui arquitetura bem simples, contudo seu projeto de hardware representa a essência de um processador. De modo geral, o modo mais simples do SAP possui a unidade de controle de forma hardwired, isto é, totalmente implementada por uma matriz de controle de portas lógicas. Isso possibilita a análise do sistema por meio de suas funções booleanas.
Especificamente, o SAP-1 é um circuito lógico que implementa uma máquina de estados. Assim, é possível verificar todas as operações realizadas pelo hardware de modo sequencial! Isso é muito interessante, pois apresenta a operação de uma CPU em um nível inferior ao de execução de instrução por instrução. A arquitetura do SAP-1, mostrada na Figura 1, é composta pelos seguintes registradores:
- Contador de Programa;
- Registrador Acumulador A;
- Registrador B;
- Registrador de Endereços de Memória REM;
- Registrador de Instruções;
- Registrador de saída.
Além disso, estão presentes nessa arquitetura um bloco somador/subtrator, memória RAM e o módulo controlador/sequencializador. A operação específica de cada elemento será apresentada no próximo artigo. Neste momento, é importante verificar que todos esses elementos estão conectados a um barramento, denominado barramento W. Outro ponto importante que vale ser mencionado é que todos esses elementos possuem sinais de controle.
Conjunto de Instruções
O conjunto de instruções do SAP-1 é simples, contudo suas instruções são compatíveis com processadores 8080/8085. As operações que podem ser realizadas são mostradas abaixo:
- LDA: Carrega os dados da RAM no acumulador;
- ADD: Soma um dado da RAM com o acumulador;
- SUB: Subtrai um dado da RAM com o acumulador;
- OUT: Carrega os dados do acumulador no registrador de saída;
- HLT: Para o processamento.
Os mnemônicos destacados acima servem apenas de auxilio para o programador. Na verdade, esses mnemônicos representam as operações realizadas, portanto são codificados como valores binários e armazenados em memória para que o processador possa executá-los. De modo geral, cada instrução do SAP-1 tem 1 byte e é representada da seguinte forma:
Instrução: XXXX YYYYY
O nibble inferior (YYYY) representa um campo de endereço, denominado operando. Já o nibble superior (XXXX) determina o código da operação. O código de cada operação é mostrado abaixo:
- LDA: 0000;
- ADD: 0001;
- SUB: 0010;
- OUT: 1110;
- HLT: 1111.
Por exemplo, considere o programa abaixo:
| Endereço | Programa | Conteúdo da Memória | Categoria |
| 0H | LDA 9H | 0000 1001 | Instruções |
| 1H | ADD AH | 0001 1010 | |
| 2H | ADD BH | 0001 1011 | |
| 3H | SUB CH | 0010 1100 | |
| 4H | OUT | 1110 0000 | |
| 5H | HLT | 1111 0000 | |
| 6H | XX | XXXX XXXX | Dados |
| 7H | XX | XXXX XXXX | |
| 8H | XX | XXXX XXXX | |
| 9H | 10H | 0001 0000 | |
| AH | 14H | 0001 0100 | |
| BH | 18H | 0001 1000 | |
| CH | 20H | 0010 0000 |
É importante notar como as instruções são representadas na memória. A execução desse programa ficaria assim:
- A primeira instrução é buscada na memória;
- A instrução decodificada é LDA, portanto deve ser carregado no acumulador o conteúdo do endereço 9H, isto é, o valor 10H (16 em decimal);
- A próxima instrução buscada na memória;
- A instrução decodificada é ADD, portanto o valor do acumulador (10H) será somado com o valor do endereço AH, isto é, o valor 14H (20 em decimal). O resultado da operação é armazenado no acumulador. Portanto, seu valor atual é 24H (36 em decimal);
- A próxima instrução buscada na memória;
- A instrução decodificada é ADD, portanto o valor do acumulador (24H) será somado com o valor do endereço BH, isto é, o valor 18H (24 em decimal). O resultado da operação é armazenado no acumulador. Portanto, seu valor atual é 3CH (60 em decimal);
- A próxima instrução buscada na memória;
- A instrução decodificada é SUB, portanto o valor presente no endereço CH (20H – 32 em decimal) será subtraído do acumulador. O resultado da operação é armazenado no acumulador. Portanto, seu valor atual é 1CH (28 em decimal);
- A próxima instrução buscada na memória;
- A instrução decodificada é OUT, portanto o valor do acumulador é transferido para o registrador de saída;
- A próxima instrução buscada na memória;
- O processamento é encerrado devido a instrução HLT.
Referências
- [1] MALVINO, A.P. Microcomputadores e Microprocessadores. McGRAW-HILL do Brasil, 1985.
- Crédito da imagem destacada.










Ótimo. Tem um bom tempo que “brinco” com o Logisim e até peguei um .circ do SAP-1 e dei uma boa destrinchada nele.
Como é gratificante ver como tudo funciona.
É um puro hobby para mim. É minha diversão aprender essas coisas e quando fazemos por prazer, é muito bom.
Vou começar engenharia de computação ano que vem, estou muito ancioso para estudar conteúdos assim, especialmente arquiteturas, quero poder entendê-las melhor. Excelente post, vou acompanhar a série, abraços.
Olá, Jonathan. O curso de Eng. de Computação é excelente. Você vai gostar, e essas questões sobre arquitetura de organização de computadores são muito importantes!
Obrigado pelo retorno.