njvm/program.c
2023-12-09 21:56:17 +01:00

117 lines
2.9 KiB
C

/*
* Created by Nils on 30.10.2023.
*/
#ifndef PROGRAM
#define PROGRAM
#include <string.h>
#include "instruktion.c"
#include <stdio.h>
struct program {
int *size;
unsigned int *program;
int *saveProgram;
};
void copyToProgram(const unsigned int codeToCopy[], int size, struct program program) {
for (int i = 0; i < size; ++i) {
program.program[i] = codeToCopy[i];
}
*program.size = size;
*program.saveProgram = 1;
}
void printProgram(struct program program) {
char c[10];
for (int i = 0; i < *program.size; i++) {
switch (program.program[i] >> 24) {
case PUSHC:
strcpy(c, "pushc");
break;
case ADD:
strcpy(c, "add");
break;
case SUB:
strcpy(c, "sub");
break;
case MUL:
strcpy(c, "mul");
break;
case DIV:
strcpy(c, "div");
break;
case MOD:
strcpy(c, "mod");
break;
case RDINT:
strcpy(c, "rdint");
break;
case WRINT:
strcpy(c, "wrint");
break;
case RDCHR:
strcpy(c, "rdchr");
break;
case WRCHR:
strcpy(c, "wrchr");
break;
case HALT:
strcpy(c, "halt");
break;
case PUSHG :
strcpy(c, "pushg");
break;
case POPG:
strcpy(c, "popg");
break;
case ASF:
strcpy(c, "asf");
break;
case RSF:
strcpy(c, "rsf");
break;
case PUSHL:
strcpy(c, "pushl");
break;
case POPL:
strcpy(c, "popl");
break;
case EQ:
strcpy(c, "eq");
break;
case NE:
strcpy(c, "ne");
break;
case LT:
strcpy(c, "lt");
break;
case LE:
strcpy(c, "le");
break;
case GT:
strcpy(c, "gt");
break;
case GE:
strcpy(c, "ge");
break;
case JMP:
strcpy(c, "jmp");
break;
case BRF:
strcpy(c, "brf");
break;
case BRT:
strcpy(c, "brt");
break;
default:
strcpy(c, "ERROR");
break;
}
IMMEDIATE(program.program[i]) ? printf("%03i:\t%s\t%i\n", i, c, SIGN_EXTEND(IMMEDIATE(program.program[i]))) : printf(
"%03i:\t%s\n", i, c);
}
}
#endif /* ifndef PROGRAMM */