njvm/stack.c
Elias Bennour 0b042fb912 fix jmp not working
fix arithmetic operations
add prog3 and prog4
add debug to instructions
2023-12-07 00:05:36 +01:00

47 lines
1.1 KiB
C
Executable File

//
// Created by Nils on 29.10.2023.
//
#ifndef STACK
#define STACK
#define SIZE 1000
#include <stdio.h>
#include <stdlib.h>
struct stackFrame {
unsigned int *fp; // Frame pointer
unsigned int *sp; // Stack pointer
unsigned int *bp; // Base pointer
};
struct stack {
int size;
int currentFrame;
struct stackFrame *frames[SIZE];
};
void printStack(struct stack *stack) {
printf("Stack:\n");
for (int i = 0; i < stack->size; ++i) {
printf("[%d] = %d\n", i, stack->frames[stack->currentFrame]->sp[i]);
}
}
void push(struct stack *stack, int value) {
struct stackFrame *currentFrame = stack->frames[stack->currentFrame];
*currentFrame->sp++ = value;
}
int pop(struct stack *stack) {
struct stackFrame *currentFrame = stack->frames[stack->currentFrame];
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