Lab 14 - VM translator
Neste laboratório iremos implementar parte do código que executa a tradução do VM para NASM.
Estrutura
O VMtranslator já foi fornecido quase todo pronto (ufa!!) vocês só precisam implementar a parte que faz a tradução de um comando vm (pilha) em nasm (registrador-memória).
LAB
Vamos implementar parte do VMtranslator.
Aritmética
Vamos comecar o lab implementando a operacoes aritméticas, mais especifica a de add (que soma dois elementos na pilha), abra o código do Code.py e procure pelas linhas:
if command == "add":
pass # TODO
A variável command é um vetor (na verdade ela vai virar um vetor de strings), é nesta variável que iremos adicionar as instruções assembly que irão realizar a operação de add, isso deve ser feito da seguinte maneira:
if command == "add":
commands.append("leaw $SP,%A")
commands.append("movw (%A),%D")
commands.append("decw %D")
...
...
No final do método o programa salva as instruções assembly relativos ao comando vm no arquivo .nasm.
Você pode remover o pass, eu só coloco para o pytest não reclamar que o código python está errado.
Como o teste funciona?
Com o teste passando, abra a pasta test_assets e repare que vários arquivos foram criados, para cada teste temos um arquivo .vm (neste caso add.vm) que gera um arquivo .nasm (no exemplo add.nasm) que possui o comando VM traduzido para assembly, este arquivo então é passado pelo assembler que gera o add.hack. Com o arquivo de linguagem de máquina, uma simulacão é executada e o teste realizado (analisasse os valores na memória RAM).