示例#1
0
  public void EX()
      throws IrregularStringOfBitsException, IntegerOverflowException, TwosComplementSumException {
    // getting strings from temporary registers
    String rt = TR[RT_FIELD].getBinString();
    String rs = TR[RS_FIELD].getBinString();
    String shift = "", rd;
    // getting the low order 5 bits from rs register
    shift = rs.substring(59);
    // cutting the high part of register
    rt = rt.substring(32, 64);
    int shift_value = Converter.binToInt(shift, true);
    // composing new shifted value and performing sign extension
    StringBuffer buf = new StringBuffer();

    for (int i = 0; i < 32; i++) {
      buf.append(rt.charAt(0));
    }

    buf.append(rt.substring(shift_value));

    // filling the remaining bits with 0
    for (int i = 0; i < shift_value; i++) {
      buf.append('0');
    }

    String target = new String(buf);

    TR[RD_FIELD].setBits(target, 0);

    if (enableForwarding) {
      doWB();
    }
  }
示例#2
0
  public void MEM()
      throws IrregularStringOfBitsException, NotAlignException, MemoryElementNotFoundException,
          AddressErrorException, IrregularWriteOperationException {
    super.MEM(); // unlock the fp register in order to avoid WAW hazards
    // restoring the address from the temporary register
    long address = TR[OFFSET_PLUS_BASE].getValue();
    // For the trace file
    Dinero din = Dinero.getInstance();
    din.Load(Converter.binToHex(Converter.positiveIntToBin(64, address)), 4);
    MemoryElement memEl = memory.getCellByAddress(address);
    // reading from the memory element and saving values on LMD register
    TR[LMD_REGISTER].writeWord(memEl.readWord((int) (address % 8)));

    if (enableForwarding) {
      doWB();
    }
  }
示例#3
0
 public void pack() throws IrregularStringOfBitsException {
   // conversion of instruction parameters of "params" list to the "repr" form (32 binary value)
   repr.setBits(OPCODE_VALUE, OPCODE_VALUE_INIT);
   repr.setBits(Converter.intToBin(RS_FIELD_LENGTH, params.get(RS_FIELD)), RS_FIELD_INIT);
   repr.setBits(Converter.intToBin(RT_FIELD_LENGTH, params.get(RT_FIELD)), RT_FIELD_INIT);
 }