@Override
 public Instruction translate(String instructionBinary) {
   Instruction instruction = new Instruction();
   instruction.setHint(substringAndCast(instructionBinary, 6, 11, String.class));
   instruction.setRt(
       new Register(
           InstructionUtil.binaryToDecimal(
               substringAndCast(instructionBinary, 16, 21, String.class))));
   instruction.setRd(
       new Register(
           InstructionUtil.binaryToDecimal(
               substringAndCast(instructionBinary, 11, 16, String.class))));
   instruction.setRs(
       new Register(
           InstructionUtil.binaryToDecimal(
               substringAndCast(instructionBinary, 21, 26, String.class))));
   instruction.setOpcode(substringAndCast(instructionBinary, 26, 32, String.class));
   instruction.setStringRepresentation(
       "ADD R"
           + instruction.getRd().getId()
           + ", R"
           + instruction.getRs().getId()
           + ", R"
           + instruction.getRt().getId());
   instruction.setOperator(Operator.ADD);
   return instruction;
 }
 private static <T> T substringAndCast(String str, int f, int s, Class<T> clazz) {
   return clazz.cast(
       new StringBuilder(InstructionUtil.substringAndCast(str, f, s, clazz).toString())
           .reverse()
           .toString());
 }