public void execute() {
        boolean en = true;
        if (hasEnable()) {
            en = pins[bits + 2].value;
        }
        if (pins[0].value && !lastClock && en) {
            int i;
            for (i = bits - 1; i >= 0; i--) {
                int ii = i + 2;
                if (!pins[ii].value) {
                    pins[ii].value = true;
                    break;
                }
                pins[ii].value = false;
            }
        }
        if (!pins[1].value == invertreset) {
            int i;
            for (i = 0; i != bits; i++) {
                pins[i + 2].value = false;
            }
        }
        lastClock = pins[0].value;
    }