/* * Created by Nils on 30.10.2023. */ #ifndef PROGRAM #define PROGRAM #include #include "instruktion.c" #include 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; case CALL: strcpy(c, "call"); break; case RET: strcpy(c, "ret"); break; case DROP: strcpy(c, "drop"); break; case PUSHR: strcpy(c, "pushr"); break; case POPR: strcpy(c, "popr"); break; case DUP: strcpy(c, "dup"); 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 */