#include "interpret.h" extern int mem[]; extern int stack[]; extern int top; extern int prg_size; void interpret(struct inst * prg) { int pc = 0, sp = 0; for( ; pc < prg_size ; pc++) { if(prg[pc].opcode == PUSH) { sp = sp + 1; stack[sp] = prg[pc].val; } else if(prg[pc].opcode == POP) sp = sp - 1; else if(prg[pc].opcode == ADD) { stack[sp-1] = stack[sp] + stack[sp-1]; sp = sp - 1; } else if(prg[pc].opcode == SUB) { stack[sp-1] = stack[sp-1] - stack[sp]; sp = sp - 1; } else if(prg[pc].opcode == MUL) { stack[sp-1] = stack[sp] * stack[sp-1]; sp = sp - 1; } else if(prg[pc].opcode == LD) stack[sp] = mem[stack[sp]]; else if(prg[pc].opcode == ST) { mem[stack[sp]] = stack[sp-1]; sp = sp - 2; } else { printf("\n Unrecognized instruction -> %d at %d\n", prg[pc].opcode, pc); exit(); } } }