From 0b042fb9128c6262121e5480769f23c306d6f260 Mon Sep 17 00:00:00 2001 From: Elias Bennour Date: Thu, 7 Dec 2023 00:05:36 +0100 Subject: [PATCH] fix jmp not working fix arithmetic operations add prog3 and prog4 add debug to instructions --- consts.c | 2 +- nja-3 | Bin 0 -> 78048 bytes njvm-3 | Bin 0 -> 53137 bytes njvm.c | 113 ++++++++++++++++++++++++++++++++++++++------- programs/prog1.bin | Bin 92 -> 92 bytes programs/prog3.asm | 61 ++++++++++++++++++++++++ programs/prog3.bin | Bin 0 -> 124 bytes programs/prog4.asm | 63 +++++++++++++++++++++++++ programs/prog4.bin | Bin 0 -> 132 bytes stack.c | 5 ++ 10 files changed, 226 insertions(+), 18 deletions(-) create mode 100755 nja-3 create mode 100755 njvm-3 create mode 100644 programs/prog3.asm create mode 100644 programs/prog3.bin create mode 100644 programs/prog4.asm create mode 100644 programs/prog4.bin diff --git a/consts.c b/consts.c index efb7fc7..4a9d776 100644 --- a/consts.c +++ b/consts.c @@ -1,6 +1,6 @@ #ifndef CONSTS #define CONSTS -#define VERSION 2 +#define VERSION 3 #endif /* ifndef CONSTS #define CONSTS diff --git a/nja-3 b/nja-3 new file mode 100755 index 0000000000000000000000000000000000000000..a703832fcbab196cf3d07e4c598ae9ca59f65230 GIT binary patch literal 78048 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

S;-en~i;+a1QV|gW+(Ex7zPDq-uWX9d!x@ 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 CR*^{n literal 0 HcmV?d00001 diff --git a/njvm-3 b/njvm-3 new file mode 100755 index 0000000000000000000000000000000000000000..b95021ab5aed45ec63d9a40425f47cd66e06b572 GIT binary patch literal 53137 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 zsize; ++i) { unsigned int instruction = program->program[i]; + if (i >= program->size) { + printf("Error: Jump out of program memory\n"); + goto end; + } + switch (instruction >> 24) { case HALT: goto end; case PUSHC: + if (debug == 1) printf("PUSHC %d\n", SIGN_EXTEND(IMMEDIATE(instruction))); push(&stack, SIGN_EXTEND(IMMEDIATE(instruction))); break; case ADD: + if (debug == 1) printf("ADD\n"); push(&stack, pop(&stack) + pop(&stack)); break; case SUB: tmp = pop(&stack); + if (debug == 1) printf("SUB\n"); + if (debug == 1) printf("tmp: %d\n", tmp); push(&stack, pop(&stack) - tmp); break; case MUL: + if (debug == 1) printf("MUL\n"); push(&stack, pop(&stack) * pop(&stack)); break; case DIV: tmp = pop(&stack); + if (debug == 1) printf("DIV\n"); + if (debug == 1) printf("tmp: %d\n", tmp); push(&stack, pop(&stack) / tmp); break; case MOD: tmp = pop(&stack); + if (debug == 1) printf("MOD\n"); + if (debug == 1) printf("tmp: %d\n", tmp); push(&stack, pop(&stack) % tmp); break; case RDINT: scanf("%i", &intInput); + if (debug == 1) printf("RDINT %d\n", intInput); push(&stack, intInput); break; case WRINT: + if (debug == 1) printf("WRINT\n"); printf("%i", pop(&stack)); break; case RDCHR: scanf("%c", &charInput); + if (debug == 1) printf("RDCHR %c\n", charInput); push(&stack, charInput); break; case WRCHR: + if (debug == 1) printf("WRCHR\n"); printf("%c", pop(&stack)); break; case PUSHG: + if (debug == 1) printf("PUSHG %d\n", SIGN_EXTEND(IMMEDIATE(instruction))); currentFrame = stack.frames[stack.currentFrame]; currentFrame->bp = currentFrame->sp; *currentFrame->sp++ = getSDA(SIGN_EXTEND(IMMEDIATE(instruction)), sda); break; case POPG: + if (debug == 1) printf("POPG %d\n", SIGN_EXTEND(IMMEDIATE(instruction))); currentFrame = stack.frames[stack.currentFrame]; currentFrame->bp = currentFrame->sp; setSDA(SIGN_EXTEND(IMMEDIATE(instruction)), pop(&stack), sda); break; case ASF: + if (debug == 1) printf("ASF %d\n", SIGN_EXTEND(IMMEDIATE(instruction))); currentFrame = stack.frames[stack.currentFrame]; push(&stack, *currentFrame->sp); *currentFrame->sp = stack.currentFrame; @@ -100,47 +122,106 @@ void execute(struct program *program, struct sda *sda) { stack.currentFrame += SIGN_EXTEND(IMMEDIATE(instruction)); break; case RSF: + if (debug == 1) printf("RSF\n"); stack.currentFrame = pop(&stack); currentFrame = stack.frames[stack.currentFrame]; currentFrame->bp = NULL; break; case PUSHL: + if (debug == 1) printf("PUSHL %d\n", SIGN_EXTEND(IMMEDIATE(instruction))); currentFrame = stack.frames[stack.currentFrame]; push(&stack, currentFrame->fp[SIGN_EXTEND(IMMEDIATE(instruction))]); break; case POPL: + if (debug == 1) printf("POPL %d\n", SIGN_EXTEND(IMMEDIATE(instruction))); currentFrame = stack.frames[stack.currentFrame]; currentFrame->fp[SIGN_EXTEND(IMMEDIATE(instruction))] = pop(&stack); break; case EQ: - push(&stack,pop(&stack)==pop(&stack)); + if (debug == 1) printf("EQ\n"); + if (pop(&stack) == pop(&stack)) { + push(&stack, 1); + } else { + push(&stack, 0); + } break; case NE: - push(&stack,pop(&stack)!=pop(&stack)); + if (debug == 1) printf("NE\n"); + if (pop(&stack) != pop(&stack)) { + push(&stack, 1); + } else { + push(&stack, 0); + } break; case LT: - push(&stack, pop(&stack)pop(&stack)); + if (debug == 1) printf("GT\n"); + if (debug == 1) printf("peek(1): %d\n", peek(&stack, 1)); + if (debug == 1) printf("peek(2): %d\n", peek(&stack, 2)); + if (debug == 1) printf("peek(1) > peek(2): %d\n", peek(&stack, 2) > peek(&stack, 1)); + tmp = pop(&stack); + if (pop(&stack) > tmp) { + push(&stack, 1); + } else { + push(&stack, 0); + } break; case GE: - push(&stack,pop(&stack)>=pop(&stack)); + if (debug == 1) printf("GE\n"); + tmp = pop(&stack); + if (pop(&stack) >= tmp) { + push(&stack, 1); + } else { + push(&stack, 0); + } break; case JMP: - i = SIGN_EXTEND(IMMEDIATE(instruction)); + if (debug == 1) printf("JMP %d\n", SIGN_EXTEND(IMMEDIATE(instruction))); + int j = SIGN_EXTEND(IMMEDIATE(program->program[i])); + if (debug == 1) printf("JMP %d\n", j); + if (j-- >= program->size) { + printf("Error: Jump out of program memory\n"); + goto end; + } + i = j; break; - case BRF: - if (pop(&stack)==0){ - i = SIGN_EXTEND(IMMEDIATE(instruction)); + case BRF: // branch on false + if (debug == 1) printf("BRF %d\nStack: %d\n", SIGN_EXTEND(IMMEDIATE(instruction)), pop(&stack)); + if (pop(&stack) == 0) { + int j = SIGN_EXTEND(IMMEDIATE(program->program[i])); + if (j-- >= program->size) { + printf("Error: BRF out of program memory\n"); + goto end; + } + i = j; } break; case BRT: - if (pop(&stack)==1){ - i = SIGN_EXTEND(IMMEDIATE(instruction)); + if (debug == 1) printf("BRT %d\n", SIGN_EXTEND(IMMEDIATE(instruction))); + if (pop(&stack) == 1) { + int j = SIGN_EXTEND(IMMEDIATE(program->program[i])); + if (j-- >= program->size) { + printf("Error: BRT out of program memory\n"); + goto end; + } + i = j; } break; } @@ -153,12 +234,12 @@ void execute(struct program *program, struct sda *sda) { // run prog2.bin void tests(void) { printf("Test started\n"); - struct sda *sda = malloc(sizeof(struct sda)); + /*struct sda *sda = malloc(sizeof(struct sda)); unsigned int s[1000]; sda->size = 1000; sda->sda = s; fromFile("prog2.bin", program); - execute(program, (struct sda *) &sda); + execute(program, (struct sda *) &sda);*/ printf("Test finished\n"); } @@ -177,7 +258,6 @@ int main(int argc, char *argv[]) { program->program = p; // Initialize runtime variables - int debug = 0; int run = 0; int sizeSDA; @@ -214,9 +294,8 @@ int main(int argc, char *argv[]) { unsigned int s[sizeSDA]; sda->size = sizeSDA; sda->sda = s; - printProgram(program); + if (debug == 1) printProgram(program); execute(program, (struct sda *) &sda); - if (debug == 1) printSDA(sda); printf("Ninja Virtual Machine stopped\n"); } else { printf("Error: no code file specified\n"); diff --git a/programs/prog1.bin b/programs/prog1.bin index 9aa0fba9cad411ca1a368b2b35fa040eda3bd8e5..1a5552c0a91d6198dcb067f80e0a731ced89006f 100644 GIT binary patch delta 11 Scma!vVfFKJa$}yz8V&#vL;}tL delta 11 Scma!vVfFKJa$}mv8V&#vKmyGG diff --git a/programs/prog3.asm b/programs/prog3.asm new file mode 100644 index 0000000..a17f3cd --- /dev/null +++ b/programs/prog3.asm @@ -0,0 +1,61 @@ +// +// prog1.asm -- an assembler example with global variables +// + +// +// compute the gcd of two positive numbers +// +// global Integer x; +// global Integer y; +// x = readInteger(); +// y = readInteger(); +// while (x != y) { +// if (x > y) { +// x = x - y; +// } else { +// y = y - x; +// } +// } +// writeInteger(x); +// writeCharacter('\n'); + + // x = readInteger(); + rdint + popg 0 + // y = readInteger(); + rdint + popg 1 + // while ... +L1: + // x != y + pushg 0 // 4 + pushg 1 + ne + brf L2 + // if ... + pushg 0 + pushg 1 + gt + brf L3 + // x = x - y + pushg 0 + pushg 1 + sub + popg 0 + jmp L4 +L3: + // y = y - x + pushg 1 // 17 + pushg 0 + sub + popg 1 +L4: + jmp L1 // 21 +L2: + // writeInteger(x); + pushg 0 // 22 + wrint + // writeCharacter('\n'); + pushc '\n' + wrchr + halt diff --git a/programs/prog3.bin b/programs/prog3.bin new file mode 100644 index 0000000000000000000000000000000000000000..da8f524cee89e1029b7235697c9146b0b31ad827 GIT binary patch literal 124 zcmebCa&lv4U|^62VkRI40(Kzg0nv;Qnj1)S1NlN?3=9%L8panDMCF5w;SptE5QnM< a>0t($!2%Qm=>uX8E(Qjm5Cf26U;qH{_X5xW literal 0 HcmV?d00001 diff --git a/programs/prog4.asm b/programs/prog4.asm new file mode 100644 index 0000000..2361a26 --- /dev/null +++ b/programs/prog4.asm @@ -0,0 +1,63 @@ +// +// prog2.asm -- an assembler example with local variables +// + +// +// compute the gcd of two positive numbers +// +// local Integer x; +// local Integer y; +// x = readInteger(); +// y = readInteger(); +// while (x != y) { +// if (x > y) { +// x = x - y; +// } else { +// y = y - x; +// } +// } +// writeInteger(x); +// writeCharacter('\n'); + + asf 2 + // x = readInteger(); + rdint + popl 0 + // y = readInteger(); + rdint + popl 1 + // while ... +L1: + // x != y + pushl 0 + pushl 1 + ne + brf L2 + // if ... + pushl 0 + pushl 1 + gt + brf L3 + // x = x - y + pushl 0 + pushl 1 + sub + popl 0 + jmp L4 +L3: + // y = y - x + pushl 1 + pushl 0 + sub + popl 1 +L4: + jmp L1 +L2: + // writeInteger(x); + pushl 0 + wrint + // writeCharacter('\n'); + pushc '\n' + wrchr + rsf + halt diff --git a/programs/prog4.bin b/programs/prog4.bin new file mode 100644 index 0000000000000000000000000000000000000000..36d2c44deb82da2752a822a1fdbfe89304446cae GIT binary patch literal 132 zcmY+6F$#b%6hogDQ3P!%XuEhB2L}i5e;gCk!4Kh)@RRG@j{t0vuZ2nIrDQe_qZs9L efhvA}$$#&uv_g6R-3i|4l({DjBPc>(mbd{H6$2#z literal 0 HcmV?d00001 diff --git a/stack.c b/stack.c index f84d3ab..4eb2c26 100755 --- a/stack.c +++ b/stack.c @@ -38,4 +38,9 @@ int pop(struct stack *stack) { return *--currentFrame->sp; } +int peek(struct stack *stack, int steps) { // peek is pop without removing the value + struct stackFrame *currentFrame = stack->frames[stack->currentFrame]; + return *(currentFrame->sp - steps); +} + #endif