Assemblando o Blink |
Aviso: o meu assembler ainda é um trabalho em curso. A versão atual está no meu github: https://github.com/dquadros/Asm1802. Bugs são bem prováveis, use por sua conta e risco. Neste momento as mensagens de erro deixam muito a desejar.
Uma primeira decisão foi desenvolver o programa em C#. O motivo principal é que eu queria usar programação orientada a objeto e aproveitar estruturas de dados como listas e dicionários. Tomada esta decisão optei por uma linguagem que eu uso habitualmente.
Existe muita teoria sobre tradução de linguagens, que eu preferi deixar de lado. Considerando as simplicidades e esquisitices da linguagem, resolvi fazer a análise e geração "na marra".
Um último detalhe a mencionar sobre decisões: usei a língua inglesa tanto para os nomes de classes e métodos como para os comentários.
Como infraestrutura, criei as seguintes classes:
- SymbolTable: uma camada fina sobre um dictionary para armazenar os símbolos e os valores associados a eles.
- InstrTable: um dictionary para ajudar a identificar as instruções, processar os operandos e gerar o código.
- Token: esta classe isola e faz uma precisa categorização de elementos como símbolos, instruções, diretivas e constantes.
- Na análise de um datalist é tentado primeiro identificar um string, se não houver sucesso deve ser uma expressão.
- Na análise de uma expressão é primeiro procurado identificar "A(", "A.0(" e "A.1(". Se não for nenhum destes devemos ter um "expressão básica" (constante, símbolo, etc).
- Analisa a linha de comando (que por enquanto só deve conter o nome do arquivo com o fonte)
- Carrega o fonte para a memória
- Separa os comandos
- Na primeira fase, analisa os comandos montando a tabela de símbolos e determinando o tamanho ocupado
- Na segunda fase, refaz a análise para obter os endereços atualizados quanto às referências aos símbolos definidos à frente, gera o código e produz a listagem de saída
- Lista a tabela de símbolos
Nenhum comentário:
Postar um comentário