// // Created by Nils on 29.10.2023. // #ifndef STACK #define STACK #define SIZE 1000 #include #include 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