From 83dae77e311455bfa52a25c926808906d2d6fbd4 Mon Sep 17 00:00:00 2001 From: Nils Polek Date: Sat, 9 Dec 2023 19:45:15 +0100 Subject: [PATCH] aufgabe 2 stack overflow --- consts.c | 2 +- nja | Bin njvm.c | 39 ++++++++++++--------------------------- prog1.bin | Bin 44 -> 0 bytes programs/prog1.asm | 31 +++++++++++++++++++++++++++++++ programs/prog1.bin | Bin 0 -> 92 bytes programs/prog2.asm | 33 +++++++++++++++++++++++++++++++++ programs/prog2.bin | Bin 0 -> 100 bytes 8 files changed, 77 insertions(+), 28 deletions(-) mode change 100644 => 100755 nja delete mode 100644 prog1.bin create mode 100644 programs/prog1.asm create mode 100644 programs/prog1.bin create mode 100644 programs/prog2.asm create mode 100644 programs/prog2.bin diff --git a/consts.c b/consts.c index efb7fc7..fe01ea4 100644 --- a/consts.c +++ b/consts.c @@ -1,6 +1,6 @@ #ifndef CONSTS #define CONSTS -#define VERSION 2 +#define VERSION 4 #endif /* ifndef CONSTS #define CONSTS diff --git a/nja b/nja old mode 100644 new mode 100755 diff --git a/njvm.c b/njvm.c index 8dd700b..435abf1 100644 --- a/njvm.c +++ b/njvm.c @@ -88,10 +88,10 @@ void execute(struct program program) { case RSF: *stack.current = fp; fp = pop(stack); - case PUSHL: + case POPL: stack.stack[fp + SIGN_EXTEND(IMMEDIATE(program.program[i]))] = pop(stack); break; - case POPL: + case PUSHL: push(stack, stack.stack[fp + SIGN_EXTEND(IMMEDIATE(program.program[i]))]); break; } @@ -131,41 +131,26 @@ int main(int argc, char *argv[]) { program.program = p; program.saveProgram = &saveProgram; + int debug = 0; -#ifdef DEBUG + if (debug){ tests(); -#endif /* ifdef DEBUG */ + } + if (argc > 1) { if (strcmp(argv[1], "--version") == 0) { version(); } else if (strcmp(argv[1], "--help") == 0) { help(); - } else if (strcmp(argv[1], "--prog1") == 0) { - copyToProgram(code1, sizeof(code1) / sizeof(code1[0]), program); - goto run; - } else if (strcmp(argv[1], "--prog2") == 0) { - copyToProgram(code2, sizeof(code2) / sizeof(code2[0]), program); - goto run; - } else if (strcmp(argv[1], "--prog3") == 0) { - copyToProgram(code3, sizeof(code3) / sizeof(code3[0]), program); - goto run; } else { - printf("unknown command line argument '%s', try './njvm --help'", argv[1]); + int temp = fromFile(argv[1], program); + int sizeSDA = temp; + unsigned int s[sizeSDA]; + sda.size = &temp; + sda.sda = s; + execute(program); } } else { - run: -// Started - if (*program.saveProgram == 1) { - printf("Ninja Virtual Machine started\n"); - printProgram(program); - execute(program); - printSDA(sda); - } else { - printf("Error: no code file specified\n"); - return 1; - } -// Stopped - printf("Ninja Virtual Machine stopped\n"); return 0; } } diff --git a/prog1.bin b/prog1.bin deleted file mode 100644 index 8cc0eb19b6f13a5f016cc1a87189b757e39821a3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44 jcmebCa&lv0U|?VeVn!eavOyFN5OV`D2N#47q!<_gG@Aip diff --git a/programs/prog1.asm b/programs/prog1.asm new file mode 100644 index 0000000..470fd7a --- /dev/null +++ b/programs/prog1.asm @@ -0,0 +1,31 @@ +// +// prog1.asm -- an assembler example with global variables +// + +// global Integer x; +// global Integer y; +// x = 2; +// y = x + 3; +// x = 7 * y + x; +// writeInteger(x + -33); +// writeCharacter('\n'); + + pushc 2 + popg 0 + pushg 0 + pushc 3 + add + popg 1 + pushc 7 + pushg 1 + mul + pushg 0 + add + popg 0 + pushg 0 + pushc -33 + add + wrint + pushc '\n' + wrchr + halt diff --git a/programs/prog1.bin b/programs/prog1.bin new file mode 100644 index 0000000000000000000000000000000000000000..9aa0fba9cad411ca1a368b2b35fa040eda3bd8e5 GIT binary patch literal 92 zcmebCa&lv0U||Njrt R1LAXVLG%DA20kEW008E11lIrn literal 0 HcmV?d00001