@Test
  public void shouldSimulateStoreWordWithoutHazard()
      throws UnreachableLabelException, InvalidInstructionException {
    Instruction first = new InstructionIType("sw $t0, 15($s1)");

    Datapath datapath = new Datapath(Arrays.asList(first), new HashMap<String, Integer>());
    rBank.setValue("t0", 7);

    // First Stage
    datapath.moveForward();

    // Second Stage
    datapath.moveForward();
    assertEquals(new Integer(0), datapath.getIdEx().getReadData1());
    assertEquals(new Integer(15), datapath.getIdEx().getReadData2());

    // Third Stage
    datapath.moveForward();
    // o valor do registrador ser� registrado no endere�o 15 da mem�ria.
    assertEquals(
        15,
        datapath
            .getExMem()
            .getALUOut()); // $s1 estava como zero, por isso a soma � 15 (que � a constante)
    assertTrue(datapath.getExMem().isMemWrite());
    assertFalse(datapath.getExMem().isMemRead());
    assertFalse(datapath.getExMem().isRegWrite());

    // Fourth Stage
    datapath.moveForward();
    assertEquals(7, memory.read(15)); // grava o valor do registrador na mem�ria
  }