Notas de aula
Proposta pelo matemático Alan Turing, trata de uma máquina de computação universal que tem funcionalidade processar símbolos e suportar programação dinâmica1.
De forma resumida, a máquina de Turing propõe um cabeçalho e uma fita, onde o cabeçalho lê símbolos da fita executa a operação ali descrita. Generalizando, é uma forma de construir um autômato.
O funcionamento da máquina se resume ao algoritmo de:
1. Ler o posição da fita;
2. Interpreta o símbolo;
3. Executa a operação ali descrita;
4. Vai para a próxima posição da fita;
5. Volta para o passo 1.
Ao analisar o resumo do algoritmo, é possível levantar a questão da parada da máquina, um problema tratado no artigo de Turing.
Confira uma animação da máquina de Turing em: https://youtu.be/gJQTFhkhwPA
Baseando na teoria da máquina de Turing, o físico e matemático John von Neumann desenvolveu uma arquitetura que era capaz de executar tal tarefa: arquitetura de Von Neumann ou arquitetura de Princeton, 1945 (wiki).
Onde o cabeçalho passa a ser uma CPU (Central Processing Unit), que lê os símbolos da fita - a fita moderna é a memória RAM - e executa uma operação. A operação por sua vez está construinda em portas lógicas e contída em uma área da circuitaria chamada ALU (Arithmetic/Logic Unit).
A maoria dos computadores modernos são construídos sobre a praxis de uma arquitetura von Neumann.
A fim de simular um processador moderno de forma didática, o ESPM 16bits apresenta as principais características de um processador moderno e permite a sua programação utilizando um Assembly de 16 instruções.
Como na arquitetura de von Neumann esse computador é composto por memória e CPU.
A CPU possui registradores, são eles:
Registrador | Descrição |
---|---|
AC | Acumulador, registrador mais importante, onde as operações são executadas |
IC | Contador de instrução, é a posição do cabeçalho na fita, ou seja, do processador em relação a memória |
Já a ALU (ULA em português) possuí 16 instruções, sendo elas:
Opcode | Mnemônico | Descrição |
---|---|---|
0 | JMP | Desvio incondicional |
1 | JZ | Desvio se acumulador for zero |
2 | JNZ | Desvio se acumulador não for zero |
3 | LV | Deposita uma constante no acumulador |
4 | ADD | Soma |
5 | SUB | Subtração |
6 | MUL | Multiplicação |
7 | DIV | Divisão |
8 | LOAD | Carrega da memória no acumulador |
9 | STOR | Grava do acumulador na memória |
A | SC | Desvio de subprograma (função) |
B | RS | Retorno de subprograma (função) |
C | END | Fim de programa |
D | IN | Entrada |
E | OUT | Saída |
F | NOP | Ciclo de processamento nulo |
A simulação está disponível em: ESPM 16bits
$ sudo adduser <username>