Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/gabrielpalassi/sisprog
Repositório de exercícios e projetos desenvolvidos na disciplina Sistemas de Programação da Poli-USP.
https://github.com/gabrielpalassi/sisprog
assembly system-programming turing-machine von-neumann-machine
Last synced: about 2 months ago
JSON representation
Repositório de exercícios e projetos desenvolvidos na disciplina Sistemas de Programação da Poli-USP.
- Host: GitHub
- URL: https://github.com/gabrielpalassi/sisprog
- Owner: gabrielpalassi
- License: gpl-3.0
- Created: 2024-07-19T16:43:14.000Z (6 months ago)
- Default Branch: master
- Last Pushed: 2024-07-19T16:59:14.000Z (6 months ago)
- Last Synced: 2024-11-21T01:41:56.554Z (about 2 months ago)
- Topics: assembly, system-programming, turing-machine, von-neumann-machine
- Language: Python
- Homepage:
- Size: 162 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# 🖥️ Sistemas de Programação
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.
## Introdução Teórica
### Máquinas de Turing
As [Máquinas de Turing](https://pt.wikipedia.org/wiki/M%C3%A1quina_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.'#### Exemplo Simples:
Uma Máquina de Turing que inverte uma sequência binária (troca 0 por 1 e vice-versa):
- Entrada: `0110`
- Saída: `1001`##### Implementação Simples (Pseudo-código):
```
Estado Inicial: S0Regras:
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
```### Máquinas de Von Neumann
As [Máquinas de Von Neumann](https://pt.wikipedia.org/wiki/Arquitetura_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.#### Exemplo Simples:
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.#### Implementação Simples (Pseudo-código MVN)
```
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
```## Conteúdo do Repositório
Este repositório é dividido em diretórios que correspondem a diferentes laboratórios realizados durante o curso:
### Lab 1 - Simulação de Máquinas de Turing
#### Objetivo:
Implementar máquinas de Turing para realizar operações básicas.
- `mt_soma.txt`: Implementa uma Máquina de Turing que calcula a soma `x + y`.
- `mt_subtracao.txt`: Implementa uma Máquina de Turing que calcula a subtração `x - y`, com `x > y` e tratamento de erros.
- `mt_soma_binaria.txt`: Implementa uma Máquina de Turing que calcula a soma `x + y` em binário, com tamanho máximo de dígitos limitado a 8.#### Instruções:
- Instalar as ferramentas necessárias.
- Testar o código usando o script python.### Lab 2 - Simulador e Programação MVN
#### Objetivo:
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.#### Instruções:
- Baixar e inicializar o simulador MVN.
- Executar os programas usando o terminal Python ou diretamente.### Lab 3 - Triângulos e Mnemônicos em MVN
#### Objetivo: Implementar máquinas de Turing para realizar operações básicas.
- `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.#### Instruções:
- Instalar as ferramentas necessárias.
- Testar o código usando o simulador MVN.### Lab 4 - Pilha e Mnemônicos em Assembly MVN
#### Objetivo:
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-rotinas `OP2MNEM` e `MNEM2OP` em Assembly.
- `stack.asm`: Implementa rotinas para empilhar e desempilhar valores usando a pilha da MVN.#### Instruções:
- Instalar as ferramentas de montagem, ligação e relocação.
- Compilar e testar o código ASM gerado.### Lab 5 - Biblioteca de Strings em Assembly MVN
#### Objetivo: Implementar máquinas de Turing para realizar operações básicas.
- `string.asm`: Implementa funções `STRLEN` e `STRCMP` para manipulação de strings.
#### Instruções:
- Montar, ligar e relocar o código ASM.
- Testar as funções de manipulação de strings.## Instalação e Uso
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.
## Links Úteis
- [Repositório do `mvn-cli`](https://github.com/PCS3616/mvn-rs)