90 lines
2.2 KiB
C
90 lines
2.2 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;
|
|
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 */
|