/// <summary> /// Metodo que ejecuta la instruccion de Sw /// </summary> /// <param name="palabra">Instruccion de la cual se extraen los parametros necesarios</param> private void Sw(Instruccion i) { int y = i.GetParametro(1), x = i.GetParametro(2), n = i.GetParametro(3); controlador.CachesDatos[id].Escribir(n + registros[y], registros[x]); Debug.WriteLine("Procesador " + id + ": SW MEM(" + n + " + R" + y + ") = R" + x); Debug.WriteLine("Procesador " + id + ": SW MEM(" + (n + registros[y]) + ") = " + registros[x]); }
/// <summary> /// Metodo que ejecuta la instruccion de Dsub /// </summary> /// <param name="palabra">Instruccion de la cual se extraen los parametros necesarios</param> private void Dsub(Instruccion i) { int y = i.GetParametro(1), z = i.GetParametro(2), x = i.GetParametro(3); Debug.WriteLine("Procesador " + id + ": DSUB R" + x + " = R" + y + " - R" + z); Debug.WriteLine("Procesador " + id + ": DSUB R" + x + " = " + registros[y] + " - " + registros[z]); registros[x] = registros[y] - registros[z]; this.Modificado = true; // Indica que hubo un cambio en un registro Debug.WriteLine("Procesador " + id + ": DSUB R" + x + " = " + registros[x]); }
/// <summary> /// Metodo que ejecuta la instruccion de Lw /// </summary> /// <param name="palabra">Instruccion de la cual se extraen los parametros necesarios</param private void Lw(Instruccion i) { int y = i.GetParametro(1), x = i.GetParametro(2), n = i.GetParametro(3); registros[x] = controlador.CachesDatos[id].Leer(n + registros[y]); this.Modificado = true; // Indica que hubo un cambio en un registro Debug.WriteLine("Procesador " + id + ": LW R" + x + " = MEM(" + n + " + R" + y + ")"); Debug.WriteLine("Procesador " + id + ": LW R" + x + " = MEM(" + (n + registros[y]) + ")"); Debug.WriteLine("Procesador " + id + ": LW R" + x + " = " + registros[x]); }
/// <summary> /// Metodo que ejecuta la instruccion de Daddi /// </summary> /// <param name="palabra">Instruccion de la cual se extraen los parametros necesarios</param> private void Daddi(Instruccion i) { int y = i.GetParametro(1), x = i.GetParametro(2), n = i.GetParametro(3); Debug.WriteLine("Procesador " + id + ": DADDI R" + x + " = R" + y + " + " + n); Debug.WriteLine("Procesador " + id + ": DADDI R" + x + " = " + registros[y] + " + " + n); registros[x] = registros[y] + n; this.Modificado = true; // Indica que hubo un cambio en un registro Debug.WriteLine("Procesador " + id + ": DADDI R" + x + " = " + registros[x]); }
/// <summary> /// Metodo que ejecuta la instruccion de Bnez /// </summary> /// <param name="palabra">Instruccion de la cual se extraen los parametros necesarios</param> private void Bnez(Instruccion i) { int x = i.GetParametro(1), n = i.GetParametro(3); if (registros[x] != 0) { programCounter = (programCounter + 4) + n * 4; Debug.WriteLine("Procesador " + id + ": BNEZ Salto a " + programCounter); programCounter -= 4; } else { Debug.WriteLine("Procesador " + id + ": BNEZ No salto"); } // Despues el metodo que llama a este aumenta en 4 el pc }