public void executeProgram() {
        runStack = new RunTimeStack();
        pc = 0;
        returnAddrs = new Stack<Integer>();
        running = true;
        dumping = false;
        while (running) {
            ByteCode code = program.getCode(pc);
            code.execute(this);
            if (dumping && code.getClass() != DumpCode.class) {
                System.out.println(code);
                runStack.dump();
            }
            pc++;
        }
    }