njvm/stack.c
Elias Bennour 4994bd6071 add call and ret function
add drop (idk if it is working right)
add prog5 and prog6
2023-12-07 03:01:24 +01:00

49 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 {
int *fp; // Frame pointer
int *sp; // Stack pointer
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, unsigned int value) {
struct stackFrame *currentFrame = stack->frames[stack->currentFrame];
*(currentFrame->sp) = value;
currentFrame->sp++;
}
int pop(struct stack *stack) {
struct stackFrame *currentFrame = stack->frames[stack->currentFrame];
currentFrame->sp--;
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