The project aims to create a translator that translate Virtual Machine (VM) language into Hack assembly language.
The project is divided into the following main files:
- main.c: The main program that manages file input/output and coordinates the translation.
- setup.c: Functions for handling input files, including extension verification and output file name creation.
- translator.c: Contains functions for translating VM instructions into assembly code, including arithmetic commands, flow control, and stack operations.
- setup.h: Function declarations for file management.
- translator.h: Function declarations for VM-to-ASM translation.
- Makefile: The build file for compiling the project.
- The program takes a
.vmfile as input, containing Virtual Machine language code. - The file is read line by line, and each instruction is interpreted and translated into Hack assembly language.
- The result is written to an output file with a
.asmextension. - The translator handles various types of instructions, including:
- Arithmetic and logical operations (
add,sub,and,or,neg, etc.) - Flow control commands (
label,goto,if-goto) - Function calls and returns (
function,call,return) - Stack operations (
push,pop)
- Arithmetic and logical operations (
To compile the project using the provided Makefile, simply run:
make mainThis will generate the VMtranslator executable.
If you prefer to compile manually, run the following command:
gcc -o VMtranslator main.c setup.c translator.cTo use the translator, execute the compiled program with a .vm file as input:
./VMtranslator filename.vmIl progetto ha come obiettivo la creazione di un traduttore che converte il linguaggio di macchina virtuale (VM) in linguaggio di assemblaggio Hack.
Il progetto è suddiviso nei seguenti file principali:
- main.c: Il programma principale che gestisce l'input/output dei file e coordina la traduzione.
- setup.c: Funzioni per la gestione dei file di input, inclusa la verifica dell'estensione e la creazione del nome del file di output.
- translator.c: Contiene le funzioni per la traduzione delle istruzioni VM in codice assembly, inclusi i comandi aritmetici, di controllo del flusso e le operazioni di stack.
- setup.h: Dichiarazioni delle funzioni di gestione dei file.
- translator.h: Dichiarazioni delle funzioni di traduzione VM-to-ASM.
- Makefile: Il file di build per la compilazione del progetto.
- Il programma prende in input un file
.vmche contiene il codice del linguaggio di macchina virtuale. - Il file viene letto riga per riga, e ogni istruzione viene interpretata e tradotta in linguaggio di assembly Hack.
- Il risultato viene scritto in un file di output con estensione
.asm. - Il traduttore gestisce vari tipi di istruzioni, tra cui:
- Operazioni aritmetiche e logiche (
add,sub,and,or,neg, ecc.) - Comandi di flusso di controllo (
label,goto,if-goto) - Chiamate di funzione e ritorni (
function,call,return) - Operazioni di stack (
push,pop)
- Operazioni aritmetiche e logiche (
Per compilare il progetto utilizzando il Makefile fornito, eseguire:
make mainQuesto genererà l'eseguibile VMtranslator.
Se si preferisce compilare manualmente, eseguire il seguente comando:
gcc -o VMtranslator main.c setup.c translator.cPer utilizzare il traduttore, eseguire il programma compilato con un file .vm come input:
./VMtranslator filename.vm