MARIE Assembly — Extensão para VS Code
Atividade Prática Final da Disciplina de Arquitetura de Computadores
Projeto: MARIE Studio — Extensão, Montador e Simulador Visual para VS Code
Extensão para o Visual Studio Code voltada à linguagem Assembly da arquitetura MARIE (Machine Architecture that is Really Intuitive and Easy), uma máquina didática utilizada no ensino de Organização e Arquitetura de Computadores.
Equipe e Créditos
Este projeto foi desenvolvido como a Atividade Prática Final da Disciplina de Arquitetura de Computadores.
Integrantes do Grupo
- Gabriel Camerini
- Henrique Otfinoski
- Lucas Blanger
- Marcelo Chies
Professor / Orientador
Funcionalidades
Realce de Sintaxe (Syntax Highlighting): colore instruções (LOAD, STORE, ADD...), diretivas (DEC, HEX), registradores (AC, MAR, MBR...) e comentários (//) em arquivos .mas e .marie.
Diagnósticos em Tempo Real (Real-time Diagnostics): sublinhado de erros (squiggles vermelhos) no editor para instruções inválidas, rótulos duplicados ou ausentes e estouro de 16 bits.
IntelliSense & Documentação em Português:
- Autocomplete: sugestão automática de instruções, diretivas de dados e rótulos declarados no arquivo.
- Hover (Dicas ao passar o mouse): explicações técnicas em português com opcodes e operações RTL, como
AC ← M[X].
- Ir para Definição (F12 / Ctrl+Click): navegação instantânea do operando para a linha onde o rótulo foi definido.
Simulador Visual Interativo (Debugger Webview):
- Diagrama do Caminho de Dados (Data Path — estilo Marie.js): esquema vetorial interativo em SVG com os registradores (
IR, OUT, IN, AC, MBR, PC, MAR), Unidade de Controle, ULA (ALU) e Memória Principal (M[MAR]), com barramentos coloridos que representam operações de leitura e escrita em tempo real.
- Grade da Memória RAM: visualização completa das 4096 palavras de memória, com destaque de leitura (azul) e escrita (verde).
- Controles de Execução: botões de Executar, Pausar, Passo a Passo (Step), Reiniciar e slider de ajuste de velocidade.
- Entrada de Dados (INPUT): formulário direto no painel com foco automático e envio pela tecla
Enter.
- Destaque no Editor: sincronização da instrução em execução com destaque na linha correspondente do arquivo de código-fonte.
Ícone Personalizado: ícone oficial para arquivos .mas e .marie no Explorer do VS Code.
Documentação Técnica dos Módulos
Para entender em detalhes o funcionamento interno de cada módulo do projeto, acesse os guias na pasta docs/:
Como Rodar em Modo de Desenvolvimento
Clone o repositório e instale as dependências:
npm install
Compile o TypeScript:
npm run compile
(Ou utilize npm run watch para recompilar automaticamente a cada alteração.)
Abra a pasta no VS Code e pressione F5 (ou execute no terminal):
code --extensionDevelopmentPath=.
Na nova janela do VS Code, abra um dos arquivos de teste em exemplos/ (ex.: soma.mas).
Clique no ícone de Dashboard no topo do editor para abrir o Simulador Visual MARIE!
Estrutura do Projeto
Marie_Studio/
├── package.json # Manifesto da extensão e contribuições
├── language-configuration.json # Regras de comentários e fechamento de parênteses
├── syntaxes/marie.tmLanguage.json # Gramática de realce de cores (TextMate Regex)
├── images/ # Logotipo e ícone oficial dos arquivos .mas
├── docs/ # Documentação detalhada dos módulos do sistema
│ ├── README.md # Índice geral da documentação
│ ├── montador.md # Arquitetura do Montador de 2 Passagens e Parser
│ ├── emulador.md # Lógica de execução do Emulador de Terminal
│ ├── simulador.md # Simulador Visual Webview, Engine e SVG Data Path
│ └── linguagem-vscode.md # Diagnostics, IntelliSense e Syntax Highlighting
├── src/
│ ├── extension.ts # Ponto de entrada e registro de comandos/providers
│ ├── assembler/
│ │ ├── instructions.ts # Tabela de opcodes e diretivas MARIE
│ │ ├── parser.ts # Parser com suporte a posições de coluna
│ │ ├── assembler.ts # Montador de 2 passagens e diagnósticos
│ │ └── emulator.ts # Emulador de execução no terminal
│ ├── providers/
│ │ ├── diagnostics.ts # Sublinhado de erros em tempo real
│ │ ├── hoverProvider.ts # Documentação Hover em Português
│ │ ├── completionProvider.ts # Autocompletar / IntelliSense
│ │ └── definitionProvider.ts # Ir para Definição (F12)
│ └── simulator/
│ ├── simulatorEngine.ts # Motor de execução e estado da CPU MARIE
│ ├── simulatorHtml.ts # Template HTML/CSS/SVG do Data Path e Simulador
│ └── simulatorPanel.ts # Gerenciador da janela Webview e decorações no editor
└── exemplos/ # Programas de teste em MARIE Assembly (.mas)
Instruções Suportadas no MARIE
| Instrução |
Opcode |
Operação RTL |
Descrição |
| JnS |
0 |
M[X] ← PC, PC ← X + 1 |
Desvio e armazenamento do endereço da instrução (Subrotina). |
| LOAD |
1 |
AC ← M[X] |
Carrega conteúdo da memória X no AC. |
| STORE |
2 |
M[X] ← AC |
Armazena o conteúdo do AC no endereço X. |
| ADD |
3 |
AC ← AC + M[X] |
Soma o conteúdo da memória X ao AC. |
| SUBT |
4 |
AC ← AC - M[X] |
Subtrai o conteúdo da memória X do AC. |
| INPUT |
5 |
AC ← InREG |
Lê valor da entrada para o AC. |
| OUTPUT |
6 |
OutREG ← AC |
Exibe o valor do AC na saída. |
| HALT |
7 |
— |
Interrompe a execução do programa. |
| SKIPCOND |
8 |
Condição no AC |
Pula a próxima instrução se a condição for satisfeita (000: AC < 0, 400: AC = 0, 800: AC > 0). |
| JUMP |
9 |
PC ← X |
Desvio incondicional para o endereço X. |
| CLEAR |
A |
AC ← 0 |
Zera o acumulador. |
| ADDI |
B |
AC ← AC + M[M[X]] |
Soma ao AC o conteúdo da posição de memória apontada indiretamente por X. |
| JUMPI |
C |
PC ← M[X] |
Desvio indireto para o endereço armazenado em X. |
| DEC |
— |
Dado Decimal |
Reserva uma palavra de memória com valor decimal (16 bits). |
| HEX |
— |
Dado Hexadecimal |
Reserva uma palavra de memória com valor hexadecimal (16 bits). |
| |