From 7390df9ee04e877500113cce35f75f6bd249839a Mon Sep 17 00:00:00 2001 From: Nils Polek Date: Sat, 9 Dec 2023 20:35:15 +0100 Subject: [PATCH] Aufgabe 2 Fertig --- consts.c | 2 +- njvm.c | 5 ++--- nja => programs/nja | Bin programs/prog3.asm | 9 +++++++++ programs/prog3.bin | Bin 0 -> 52 bytes stack.c | 5 +++-- 6 files changed, 15 insertions(+), 6 deletions(-) rename nja => programs/nja (100%) create mode 100644 programs/prog3.asm create mode 100644 programs/prog3.bin diff --git a/consts.c b/consts.c index fe01ea4..efb7fc7 100644 --- a/consts.c +++ b/consts.c @@ -1,6 +1,6 @@ #ifndef CONSTS #define CONSTS -#define VERSION 4 +#define VERSION 2 #endif /* ifndef CONSTS #define CONSTS diff --git a/njvm.c b/njvm.c index 435abf1..c3561bb 100644 --- a/njvm.c +++ b/njvm.c @@ -82,11 +82,11 @@ void execute(struct program program) { break; case ASF: push(stack, *stack.current); - fp = *stack.current; + fp = *stack.current - 1; *stack.current = *stack.current + SIGN_EXTEND(IMMEDIATE(program.program[i])); break; case RSF: - *stack.current = fp; + *stack.current = fp + 2; fp = pop(stack); case POPL: stack.stack[fp + SIGN_EXTEND(IMMEDIATE(program.program[i]))] = pop(stack); @@ -99,7 +99,6 @@ void execute(struct program program) { end: return; } - #ifdef DEBUG void tests(void) { diff --git a/nja b/programs/nja similarity index 100% rename from nja rename to programs/nja diff --git a/programs/prog3.asm b/programs/prog3.asm new file mode 100644 index 0000000..23dbd0d --- /dev/null +++ b/programs/prog3.asm @@ -0,0 +1,9 @@ + pushc 1 + asf 2 + asf 4 + pushc 23 + asf 3 + rsf + rsf + rsf + halt diff --git a/programs/prog3.bin b/programs/prog3.bin new file mode 100644 index 0000000000000000000000000000000000000000..f4885ea710cfd193f55e21ff718accbeff38654b GIT binary patch literal 52 lcmebCa&lv0U|`?`Vh~^iA|Ria1&GCgY-S)06y`(13;;ue0iXZ? literal 0 HcmV?d00001 diff --git a/stack.c b/stack.c index 8a38d26..31a00f6 100755 --- a/stack.c +++ b/stack.c @@ -13,9 +13,10 @@ struct stack { unsigned int *stack; }; -void printStack(struct stack stack) { +void printStack(struct stack stack, int fp) { printf("Stack\nSize:\t\t%i\nCurrent:\t%i\n", *stack.size, *stack.current); - for (int i = 0; i < *stack.size; ++i) { + for (int i = 0; i < *stack.current; ++i) { + if(fp == i) printf("|FP|\n"); printf("|%i|\n", stack.stack[i]); } }