Exemplo n.º 1
0
        /// <summary><para>Ejecuta el tercer subciclo de la microinstrucción.
        /// </para>
        /// <para>En él:
        ///	   <list type="bullet">
        ///	   <item><description>
        ///    se ejecuta la operación de la ALU
        ///    (indicada en el campo ALU de la microinstrucción)
        ///    </description></item>
        ///    <item><description>
        ///    Desplaza el resultado obtenido en la ALU en el registro SH.
        ///    </description></item>
        ///    <item><description>
        ///    Si es necesario se carga el registro MAR con el
        ///    contenido de bufferB.
        ///    </description></item>
        ///    </list>
        /// </para>
        /// </summary>

        private void EjecutarSubciclo3()
        {
            if (rmc.GetAMUX() == 1)
            {
                alu.Operar(rmc.GetALU(), rmc.GetSH(), _mbr, regB);
            }
            else
            {
                alu.Operar(rmc.GetALU(), rmc.GetSH(), regA, regB);
            }


            if (rmc.GetMAR() == 1)
            {
                _mar = regB;
            }
            repRdd.DibujarCiclo3(rmc, alu.LeerResultado(), _mar, _mbr,
                                 alu.LeerC(), alu.LeerN(), alu.LeerZ());
        }
Exemplo n.º 2
0
        /// <summary>Actualiza el contenido del registro MBR y de
        /// la memoria según la secuencia de mInstrucciones.</summary>
        /// <param name="inst"></param>

        private void ActualizarPeticionesMemoria(MicroInstruccion inst)
        {
            if ((inst.GetMAR() == 1) || (inst.GetMBR() == 1))
            {
                _petLecturaMemoria   = 0;
                _petEscrituraMemoria = 0;
            }

            if ((inst.GetWR() == 1) && (inst.GetRD() == 1))
            {
                _petEscrituraMemoria = 0;
                _petLecturaMemoria   = 0;
            }
            else if (inst.GetWR() == 1)
            {
                _petEscrituraMemoria++;
                _petLecturaMemoria = 0;
            }
            else if (inst.GetRD() == 1)
            {
                _petLecturaMemoria++;
                _petEscrituraMemoria = 0;
            }
            else
            {
                _petLecturaMemoria   = 0;
                _petEscrituraMemoria = 0;
            }
            if (_petLecturaMemoria > 1)
            {
                _mbr = mp.LeerDato(_mar);
            }
            if (_petEscrituraMemoria > 1)
            {
                mp.EscribirDato(_mar, _mbr);
            }
        }