From 62ede37645984b0b79edc50622f57f5efe631bf4 Mon Sep 17 00:00:00 2001 From: nilsplk Date: Sat, 21 Oct 2023 21:09:01 +0200 Subject: [PATCH] Operations now work --- njvm.c | 41 +++++++++++++++++++++++++++++++++++++---- 1 file changed, 37 insertions(+), 4 deletions(-) diff --git a/njvm.c b/njvm.c index 8e2c6b9..3b80e1a 100644 --- a/njvm.c +++ b/njvm.c @@ -68,35 +68,48 @@ void useption(int argc, char *argv[]) { void execute(void) { int i = 0; + int intInput; + int temp; + char charInput; while (programmSpeicher[i] != 0) { switch (programmSpeicher[i] >> 24) { case HALT: break; case PUSHC: + stackPush(IMMEDIATE(programmSpeicher[i])); break; case ADD: stackPush(stackPop()+stackPop()); break; case SUB: - stackPush(stackPop()-stackPop()); + temp = stackPop(); + stackPush(stackPop() - temp); break; case MUL: stackPush(stackPop()*stackPop()); break; case DIV: - stackPush(stackPop()/stackPop()); + temp = stackPop(); + stackPush(stackPop()/temp); break; case MOD: - stackPush(stackPop()%stackPop()); + temp = stackPop(); + stackPush(stackPop()%temp); break; case RDINT: + scanf("%i",&intInput); + stackPush(intInput); break; case WRINT: + printf("%i\n",stackPop()); break; case RDCHR: + scanf("%c",&charInput); + stackPush(charInput); break; case WRCHR: + printf("%c\n",stackPop()); break; } i++; @@ -104,8 +117,28 @@ void execute(void) { } #ifdef DEBUG +void printStck(){ + if(current >= 0) {return;} + printf("----\n"); + for (int i = 0; i < current; i++) { + printf("|%i| \n",stack[i]); + } + printf("----\n"); +} + void tests(){ - printf("test\n"); + printf("Runnig debug mode\n"); + stackPush(10); + stackPush(15); + stackPush(13); + printStck(); + current = 0; + programmSpeicher[0] = (RDINT << 24); + programmSpeicher[1] = (RDINT << 24); + programmSpeicher[2] = (MOD << 24); + programmSpeicher[3] = (WRINT << 24); + execute(); + printStck(); } #endif /* ifdef DEBUG */