42 lines
895 B
C
Executable File
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
|