@Override
    public void execute()
    {
        if (mf.isExecuting() && mf.isUpdateAllowed())
        {
            try
            {
                OpenDLXSimulator openDLXSim = mf.getOpenDLXSim();
                // if there is a saved preference for x address, load it
                address = Preference.pref.get(preferenceKey, address);
                //show inputDialog and get input value
                Integer value = ValueInput.getValue("Run to address: ", address);
                // value is null if there was an error during input
                if (value != null)
                {
                    // if value is valid, save it as new preference
                    Preference.pref.put(preferenceKey, "0x" + Integer.toHexString(value));
                    uint32 target_address = new uint32(value);
                    Queue<FetchDecodeData> fetch_decode_latch = openDLXSim.getPipeline().getFetchDecodeLatch();
                    while (!fetch_decode_latch.element().getPc().equals(target_address) && !openDLXSim.isFinished())
                    {
                        try
                        {
                            openDLXSim.step();
                        }
                        catch (PipelineException e)
                        {
                            mf.getPipelineExceptionHandler().handlePipelineExceptions(e);
                        }
                    }

                    new CommandUpdateFrames(mf).execute();

                    if (openDLXSim.isFinished())
                    { // if the current openDLX has finished, dont allow any gui updates any more
                        mf.setUpdateAllowed(false);
                        new CommandSimulatorFinishedInfo().execute();
                    }
                }
            }
            catch (NumberFormatException e)
            {
                JOptionPane.showMessageDialog(mf, "for input only Integer - decimal or hex (0x...) allowed");
                //if an error during input occured, restart input dialog to get new input
                execute();
            }
            catch (Exception e)
            {
                //something else went wrong
                System.err.println(e.toString());
                e.printStackTrace();
                JOptionPane.showMessageDialog(mf, "Executing commands failed");
            }
        }


    }