/// <summary><para>Ejecuta el cuarto subciclo de la microinstrucción. /// </para> /// <para>En él: /// <list type="bullet"> /// <item><description> /// Almacenamos el contenido de SH en el banco de registros. /// </description></item> /// <item><description> /// Si es necesario copiamos SH a MBR. /// </description></item> /// <item><description> /// Obtenemos en RDC la dirección de la siguiente microinstrucción /// a ejecutar. /// </description></item> /// </list> /// </para></summary> private void EjecutarSubciclo4() { if (rmc.GetMBR() == 1) { _mbr = alu.LeerResultado(); } if (rmc.GetENC() == 1) { registros.EscribirRegistro(rmc.GetC(), alu.LeerResultado()); } //Opciones de salto. if (rmc.GetFIR() == 1) { RDC = (short)((registros.LeerRegistro (BancoRegistros.IR) >> 11) & (0x1F)); } else if (Bifurca(rmc.GetCOND())) { RDC = (short)rmc.GetADDR(); } else { RDC++; } repRdd.DibujarCiclo4(rmc, _mbr); }
/// <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); } }