njvm/stack.c
2023-12-04 02:39:23 +01:00

42 lines
895 B
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;
}
#endif