/* * Created by Nils on 30.10.2023. */ #ifndef PROGRAM #define PROGRAM #include #include "instruktion.c" #include struct program { unsigned int *program; int size; }; 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; } 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 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; 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 */