Bem-vindo ao repositório dos Laboratórios da disciplina PCS3616 - Sistemas de Programação da Poli-USP. Este repositório contém os exercícios e projetos mais interessantes desenvolvidos ao longo do quadrimestre, cobrindo diversas áreas, como máquinas de Turing, linguagem de máquina MVN, e Assembly.
As Máquinas de Turing são modelos teóricos de computação introduzidos por Alan Turing em 1936. Elas são compostas por:
- Uma fita infinita que funciona como memória, dividida em células que podem conter símbolos.
- Um cabeçote de leitura/escrita que se move pela fita, lendo e escrevendo símbolos.
- Um conjunto de estados e regras que determinam as ações do cabeçote com base no símbolo lido e no estado atual.'
Uma Máquina de Turing que inverte uma sequência binária (troca 0 por 1 e vice-versa):
- Entrada:
0110
- Saída:
1001
Estado Inicial: S0
Regras:
1. Se S0 e lê 0, escreve 1, move para a direita, continua em S0
2. Se S0 e lê 1, escreve 0, move para a direita, continua em S0
3. Se S0 e lê branco (fim da fita), para
As Máquinas de Von Neumann, também conhecidas como Arquitetura de Von Neumann, são a base dos computadores modernos, propostas por John von Neumann em 1945. Elas são caracterizadas por:
- Uma unidade central de processamento (CPU) que executa instruções.
- Memória que armazena dados e instruções.
- Dispositivos de entrada e saída para comunicação com o mundo externo.
Um programa em linguagem de máquina MVN que soma dois números:
- Entrada: Dois números armazenados nas posições de memória 1 e 2.
- Saída: A soma dos dois números armazenada na posição de memória 3.
LOAD M(1) ; Carrega o valor da posição 1 para o registrador
ADD M(2) ; Soma o valor da posição 2 ao valor do registrador
STORE M(3) ; Armazena o resultado na posição 3
HALT ; Termina a execução
Este repositório é dividido em diretórios que correspondem a diferentes laboratórios realizados durante o curso:
Implementar máquinas de Turing para realizar operações básicas.
mt_soma.txt
: Implementa uma Máquina de Turing que calcula a somax + y
.mt_subtracao.txt
: Implementa uma Máquina de Turing que calcula a subtraçãox - y
, comx > y
e tratamento de erros.mt_soma_binaria.txt
: Implementa uma Máquina de Turing que calcula a somax + y
em binário, com tamanho máximo de dígitos limitado a 8.
- Instalar as ferramentas necessárias.
- Testar o código usando o script python.
Criar e testar programas na linguagem de máquina MVN para operações aritméticas e de entrada/saída.
ex1-soma.mvn
: Soma dois valores e armazena o resultado em uma posição de memória.ex2-subtracao.mvn
: Subtrai dois valores usando uma sub-rotina.ex3-io.mvn
: Lê dois números do teclado e imprime a soma.
- Baixar e inicializar o simulador MVN.
- Executar os programas usando o terminal Python ou diretamente.
triangulos.mvn
: Determina se três valores formam um triângulo e qual o tipo.op-mnem.mvn
: Converte entre códigos de operações e seus mnemônicos.quadrados-perfeitos.mvn
: Calcula e tabela os quadrados perfeitos dos primeiros 64 números naturais.
- Instalar as ferramentas necessárias.
- Testar o código usando o simulador MVN.
Escrever e testar código em Assembly (ASM) para MVN, incluindo a implementação de sub-rotinas e uso da pilha.
op-mnem.asm
: Implementa as sub-rotinasOP2MNEM
eMNEM2OP
em Assembly.stack.asm
: Implementa rotinas para empilhar e desempilhar valores usando a pilha da MVN.
- Instalar as ferramentas de montagem, ligação e relocação.
- Compilar e testar o código ASM gerado.
string.asm
: Implementa funçõesSTRLEN
eSTRCMP
para manipulação de strings.
- Montar, ligar e relocar o código ASM.
- Testar as funções de manipulação de strings.
Para compilar e testar os programas, siga as instruções específicas em cada laboratório para instalar ferramentas e executar o código (README.md
de cada diretório). Referências para ferramentas e exemplos de execução estão disponíveis nos arquivos de cada laboratório.