## mars.tools
Class InstructionCounter

    java.lang.Object
      java.awt.Component
          java.awt.Container
              java.awt.Window
                  java.awt.Frame
                      javax.swing.JFrame
                          mars.tools.AbstractMarsToolAndApplication
                              mars.tools.InstructionCounter

All Implemented Interfaces:
  ImageObserver, MenuContainer, Serializable, Observer, Accessible, RootPaneContainer, WindowConstants, MarsTool

    public class InstructionCounter

extends AbstractMarsToolAndApplication

Instruction counter tool. Can be used to know how many instructions were executed to complete a given program. Code slightly based on MemoryReferenceVisualization.

Author:
  Felipe Lessa <felipe.lessa@gmail.com>
See Also:
  Serialized Form

Nested Class Summary

Nested classes/interfaces inherited from class mars.tools.AbstractMarsToolAndApplication
`AbstractMarsToolAndApplication.ConnectButton, AbstractMarsToolAndApplication.EnterKeyListener`

Nested classes/interfaces inherited from class javax.swing.JFrame
`JFrame.AccessibleJFrame`

Nested classes/interfaces inherited from class java.awt.Frame
`Frame.AccessibleAWTFrame`

Nested classes/interfaces inherited from class java.awt.Window
`Window.AccessibleAWTWindow`

Nested classes/interfaces inherited from class java.awt.Container
`Container.AccessibleAWTContainer`

Nested classes/interfaces inherited from class java.awt.Component
`Component.AccessibleAWTComponent, Component.BaselineResizeBehavior, Component.BltBufferStrategy, Component.FlipBufferStrategy`

Field Summary
`protected int` `counter` Number of instructions executed until now.
`protected int` `counterI` Number of instructions of type I.
`protected int` `counterJ` Number of instructions of type J.
`protected int` `counterR` Number of instructions of type R.
`protected int` `lastAddress` The last address we saw.

Fields inherited from class mars.tools.AbstractMarsToolAndApplication
`connectButton, isBeingUsedAsAMarsTool, theWindow, thisMarsApp`

Fields inherited from class javax.swing.JFrame
`accessibleContext, EXIT_ON_CLOSE, rootPane, rootPaneCheckingEnabled`

Fields inherited from class java.awt.Frame
`CROSSHAIR_CURSOR, DEFAULT_CURSOR, E_RESIZE_CURSOR, HAND_CURSOR, ICONIFIED, MAXIMIZED_BOTH, MAXIMIZED_HORIZ, MAXIMIZED_VERT, MOVE_CURSOR, N_RESIZE_CURSOR, NE_RESIZE_CURSOR, NORMAL, NW_RESIZE_CURSOR, S_RESIZE_CURSOR, SE_RESIZE_CURSOR, SW_RESIZE_CURSOR, TEXT_CURSOR, W_RESIZE_CURSOR, WAIT_CURSOR`

Fields inherited from class java.awt.Component
`BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT`

Fields inherited from interface javax.swing.WindowConstants
`DISPOSE_ON_CLOSE, DO_NOTHING_ON_CLOSE, HIDE_ON_CLOSE`

Fields inherited from interface java.awt.image.ImageObserver
`ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH`

Constructor Summary
`InstructionCounter()` Simple construction, likely used by the MARS Tools menu mechanism.
`InstructionCounter(String title, String heading)` Simple constructor, likely used to run a stand-alone memory reference visualizer.

Method Summary
`protected void` `addAsObserver()` Add this app/tool as an Observer of desired MIPS Observables (memory and registers).
`protected JComponent` `buildMainDisplayArea()` Abstract method that must be instantiated by subclass to build the main display area of the GUI.
`String` `getName()` Required MarsTool method to return Tool name.
`protected void` `initializePreGUI()` Method that will be called once just before the GUI is constructed in the go() and action() methods.
`protected void` `processMIPSUpdate(Observable resource, AccessNotice notice)` Override this method to process a received notice from MIPS Observable (memory or register) It will only be called if the notice was generated as the result of MIPS instruction execution.
`protected void` `reset()` Method that will be called each time the default Reset button is clicked.
`protected void` `updateDisplay()` Override this method to implement updating of GUI after each MIPS instruction is executed, while running in "timed" mode (user specifies execution speed on the slider control).

Methods inherited from class mars.tools.AbstractMarsToolAndApplication
`action, addAsObserver, addAsObserver, buildButtonAreaMarsTool, buildButtonAreaStandAlone, buildHeadingArea, deleteAsObserver, deleteAsObserver, getHelpComponent, go, initializePostGUI, isObserving, performSpecialClosingDuties, update`

Methods inherited from class javax.swing.JFrame

`addImpl, createRootPane, frameInit, getAccessibleContext, getContentPane, getDefaultCloseOperation, getGlassPane, getGraphics, getJMenuBar, getLayeredPane, getRootPane, getTransferHandler, isDefaultLookAndFeelDecorated, isRootPaneCheckingEnabled, paramString, processWindowEvent, remove, repaint, setContentPane, setDefaultCloseOperation, setDefaultLookAndFeelDecorated, setGlassPane, setIconImage, setJMenuBar, setLayeredPane, setLayout, setRootPane, setRootPaneCheckingEnabled, setTransferHandler, update`

Methods inherited from class java.awt.Frame
`addNotify, getCursorType, getExtendedState, getFrames, getIconImage, getMaximizedBounds, getMenuBar, getState, getTitle, isResizable, isUndecorated, remove, removeNotify, setCursor, setExtendedState, setMaximizedBounds, setMenuBar, setResizable, setState, setTitle, setUndecorated`

Methods inherited from class java.awt.Window

`addPropertyChangeListener, addPropertyChangeListener, addWindowFocusListener, addWindowListener, addWindowStateListener, applyResourceBundle, applyResourceBundle, createBufferStrategy, createBufferStrategy, dispose, getBufferStrategy, getFocusableWindowState, getFocusCycleRootAncestor, getFocusOwner, getFocusTraversalKeys, getGraphicsConfiguration, getIconImages, getInputContext, getListeners, getLocale, getModalExclusionType, getMostRecentFocusOwner, getOwnedWindows, getOwner, getOwnerlessWindows, getToolkit, getWarningString, getWindowFocusListeners, getWindowListeners, getWindows, getWindowStateListeners, hide, isActive, isAlwaysOnTop, isAlwaysOnTopSupported, isFocusableWindow, isFocusCycleRoot, isFocused, isLocationByPlatform, isShowing, pack, paint, postEvent, processEvent, processWindowFocusEvent, processWindowStateEvent, removeWindowFocusListener, removeWindowListener, removeWindowStateListener, reshape, setAlwaysOnTop, setBounds, setBounds, setCursor, setFocusableWindowState, setFocusCycleRoot, setIconImages, setLocationByPlatform, setLocationRelativeTo, setMinimumSize, setModalExclusionType, setSize, setSize, setVisible, show, toBack, toFront`

Methods inherited from class java.awt.Container

`add, add, add, add, add, addContainerListener, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getAlignmentX, getAlignmentY, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getComponentZOrder, getContainerListeners, getFocusTraversalPolicy, getInsets, getLayout, getMaximumSize, getMinimumSize, getMousePosition, getPreferredSize, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusTraversalPolicyProvider, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paintComponents, preferredSize, print, printComponents, processContainerEvent, remove, removeAll, removeContainerListener, setComponentZOrder, setFocusTraversalKeys, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, setFont, transferFocusBackward, transferFocusDownCycle, validate, validateTree`

Methods inherited from class java.awt.Component

`action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, bounds, checkImage, checkImage, coalesceEvents, contains, contains, createImage, createImage, createVolatileImage, createVolatileImage, disable, disableEvents, dispatchEvent, enable, enable, enableEvents, enableInputMethods, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getBackground, getBaseline, getBaselineResizeBehavior, getBounds, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getFontMetrics, getForeground, getHeight, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocation, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getParent, getPeer, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getSize, getTreeLock, getWidth, getX, getY, gotFocus, handleEvent, hasFocus, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, isDoubleBuffered, isEnabled, isFocusable, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isOpaque, isPreferredSizeSet, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, prepareImage, prepareImage, printAll, processComponentEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processKeyEvent, processMouseEvent, processMouseMotionEvent, processMouseWheelEvent, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, resize, resize, setBackground, setComponentOrientation, setDropTarget, setEnabled, setFocusable, setFocusTraversalKeysEnabled, setForeground, setIgnoreRepaint, setLocale, setLocation, setLocation, setMaximumSize, setName, setPreferredSize, show, size, toString, transferFocus, transferFocusUpCycle`

Methods inherited from class java.lang.Object
`clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

Methods inherited from interface java.awt.MenuContainer
`getFont, postEvent`

Field Detail

### counter

    protected int counter

  Number of instructions executed until now.

### counterR

    protected int counterR

  Number of instructions of type R.

### counterI

    protected int counterI

  Number of instructions of type I.

### counterJ

    protected int counterJ

  Number of instructions of type J.

### lastAddress

    protected int lastAddress

  The last address we saw. We ignore it because the only way for a program to execute twice the same instruction is to enter an infinite loop, which is not insteresting in the POV of counting instructions.

Constructor Detail

### InstructionCounter

    public InstructionCounter(String title,
                              String heading)

  Simple constructor, likely used to run a stand-alone memory reference visualizer.

  Parameters:
    `title` - String containing title for title bar
    `heading` - String containing text for heading shown in upper part of window.

### InstructionCounter

    public InstructionCounter()

  Simple construction, likely used by the MARS Tools menu mechanism.

Method Detail

### getName

    public String getName()

  Description copied from class: `AbstractMarsToolAndApplication`
  Required MarsTool method to return Tool name. Must be defined by subclass.

  Specified by:
    `getName` in interface `MarsTool`
  Specified by:
    `getName` in class `AbstractMarsToolAndApplication`
  Returns:
    Tool name. MARS will display this in menu item.

### buildMainDisplayArea

    protected JComponent buildMainDisplayArea()

  Description copied from class: `AbstractMarsToolAndApplication`
  Abstract method that must be instantiated by subclass to build the main display area of the GUI. It will be placed in the CENTER area of a BorderLayout. The title is in the NORTH area, and the controls are in the SOUTH area.

  Specified by:
    `buildMainDisplayArea` in class `AbstractMarsToolAndApplication`

### addAsObserver

    protected void addAsObserver()

  Description copied from class: `AbstractMarsToolAndApplication`
  Add this app/tool as an Observer of desired MIPS Observables (memory and registers). By default, will add as an Observer of the entire Data Segment in memory. Override if you want something different. Note that the Memory methods to add an Observer to memory are flexible (you can register for a range of addresses) but may throw an AddressErrorException that you need to catch. This method is called whenever the default "Connect" button on a MarsTool or the default "Assemble and run" on a stand-alone Mars app is selected. The corresponding NOTE: if you do not want to register as an Observer of the entire data segment (starts at address 0x10000000) then override this to either do some alternative or nothing at all. This method is also overloaded to allow arbitrary memory subrange.

  Overrides:
    `addAsObserver` in class `AbstractMarsToolAndApplication`

### processMIPSUpdate

    protected void processMIPSUpdate(Observable resource,
                                     AccessNotice notice)

  Description copied from class: `AbstractMarsToolAndApplication`
  Override this method to process a received notice from MIPS Observable (memory or register) It will only be called if the notice was generated as the result of MIPS instruction execution. By default it does nothing. After this method is complete, the updateDisplay() method will be invoked automatically.

  Overrides:
    `processMIPSUpdate` in class `AbstractMarsToolAndApplication`

### initializePreGUI

    protected void initializePreGUI()

  Description copied from class: `AbstractMarsToolAndApplication`
  Method that will be called once just before the GUI is constructed in the go() and action() methods. Use it to initialize any data structures needed for the application whose values will be needed to determine the initial state of GUI components. By default it does nothing.

  Overrides:
    `initializePreGUI` in class `AbstractMarsToolAndApplication`

### reset

    protected void reset()

  Description copied from class: `AbstractMarsToolAndApplication`
  Method that will be called each time the default Reset button is clicked. Use it to reset any data structures and/or GUI components. By default it does nothing.

  Overrides:
    `reset` in class `AbstractMarsToolAndApplication`

### updateDisplay

    protected void updateDisplay()

  Description copied from class: `AbstractMarsToolAndApplication`
  Override this method to implement updating of GUI after each MIPS instruction is executed, while running in "timed" mode (user specifies execution speed on the slider control). Does nothing by default.

  Overrides:
    `updateDisplay` in class `AbstractMarsToolAndApplication`