/// <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()); }
/// <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); } }