static int CacheAsociativa(int i) {

        int Etiqueta = Integer.parseInt(Integer.toBinaryString(0x1000 | i).substring(1).substring(0, 9));
        int Palabra = Integer.parseInt(Integer.toBinaryString(0x1000 | i).substring(1).substring(9, 12), 2);
        int Linea = leastRecentlyUsed.consult(Integer.parseInt(Integer.toBinaryString(Etiqueta),2));
        leastRecentlyUsed.checkMap();

        if (CacheMemoryD[Linea].isValid()) {
            if (CacheMemoryD[Linea].getEtiqueta() == Etiqueta) {
                Time += 0.01;
                return CacheMemoryD[Linea].recoverWord(Palabra);
            } else {
                if (CacheMemoryD[Linea].isModify()) {
                    int firstLine = Integer.parseInt(Integer.toString(Etiqueta), 2) * 8;
                    int firstLineM = Integer.parseInt(Integer.toString(CacheMemoryD[Linea].getEtiqueta()), 2) * 8;
                    int count = 0;

                    for (int j = firstLineM; j < firstLineM + 8; j++) {
                        RAM[j] = CacheMemoryD[Linea].getPalabra()[count];
                        count++;
                    }

                    count = 0;
                    for (int j = firstLine; j < firstLine + 8; j++) {
                        CacheMemoryD[Linea].getPalabra()[count] = RAM[j];
                        count++;
                    }

                    CacheMemoryD[Linea].setValid(true);
                    CacheMemoryD[Linea].setModify(false);
                    Time += 0.75;

                } else {
                    int firstLine = Integer.parseInt(Integer.toString(Etiqueta), 2) * 8;
                    int count = 0;

                    count = 0;
                    for (int j = firstLine; j < firstLine + 8; j++) {
                        CacheMemoryD[Linea].getPalabra()[count] = RAM[j];
                        count++;
                    }

                    CacheMemoryD[Linea].setValid(true);
                    CacheMemoryD[Linea].setModify(false);
                }

                CacheMemoryD[Linea].setEtiqueta(Etiqueta);
                Time += 0.66;
                return CacheMemoryD[Linea].recoverWord(Palabra);
            }
        } else {
            int firstLine = Integer.parseInt(Integer.toString(Etiqueta), 2) * 8;
            int count = 0;

            for (int j = firstLine; j < firstLine + 8; j++) {
                CacheMemoryD[Linea].getPalabra()[count] = RAM[j];
                count++;
            }

            CacheMemoryD[Linea].setEtiqueta(Etiqueta);
            CacheMemoryD[Linea].setValid(true);
            CacheMemoryD[Linea].setModify(false);
            Time += 0.66;
            return CacheMemoryD[Linea].recoverWord(Palabra);
        }
    }