예제 #1
0
        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]));
            }
        }
예제 #2
0
        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;
            }
        }