private void procesarInstruccionP2(string linea) { string[] tokens = linea.Split(new char[] { ' ' }); Instruccion inst = instSet[tokens[0]]; fsal.Write((float)inst.opcode); if (inst.nombre.Equals("ipush") || inst.nombre.Equals("iload") || inst.nombre.Equals("istore") || inst.nombre.Equals("bpush") || inst.nombre.Equals("bload") || inst.nombre.Equals("bstore") || inst.nombre.Equals("sload") || inst.nombre.Equals("sstore") || inst.nombre.Equals("fpush") || inst.nombre.Equals("fload") || inst.nombre.Equals("fstore")) { fsal.Write(Convert.ToSingle(tokens[1])); //Debug.WriteLine(inst.nombre + " " + tokens[1]); } else if (inst.nombre.Equals("goto") || inst.nombre.Equals("ifeq") || inst.nombre.Equals("ifne") || inst.nombre.Equals("ifgt") || inst.nombre.Equals("ifge") || inst.nombre.Equals("iflt") || inst.nombre.Equals("ifle")) { fsal.Write((float)etiquetas[tokens[1]]); //Debug.WriteLine(inst.nombre + " " + tokens[1] + " " + etiquetas[tokens[1]]); } else if (inst.nombre.Equals("spush")) { fsal.Write((float)cadenas.IndexOf(tokens[1].Substring(1, tokens[1].Length - 2))); } else if (inst.nombre.Equals("callapi")) { fsal.Write((float)cadenas.IndexOf(tokens[1])); } }
private void procesarInstruccionP1(string linea) { string[] tokens = linea.Split(new char[] { ' ' }); Instruccion inst = instSet[tokens[0]]; //Si la instrucción existe if (inst != null) { //Si el número de parámetros de la instrucción es correcto if ((tokens.Length - 1) == inst.numpar) { progCounter += inst.numpar + 1; //Si es una instrucción SPUSH almacenamos la constante en la tabla de cadenas if (tokens[0].Equals("spush")) { cadenas.Add(tokens[1].Substring(1, tokens[1].Length - 2)); } else if (tokens[0].Equals("callapi")) { cadenas.Add(tokens[1]); } } else { Console.WriteLine("Número de parámetros incorrecto:"); Console.WriteLine(linea); ensambladoOK = false; } } else { Console.WriteLine("Instrucción inexistente:"); Console.WriteLine(linea); ensambladoOK = false; } }