Esempio n. 1
0
        private string J(string m)/////
        {
            this.cp = MetodosAuxiliares.hexadecimalADecimal(m);

            return("CP<-m");
        }
Esempio n. 2
0
        public string ejecutaPaso()
        {
            string mensaje;

            mensaje = "";
            try
            {
                if (ejecutable)
                {
                    string codOp;
                    string m;
                    codOp = this.memoria.ObtenCodOp(ref this.cp);
                    m     = this.memoria.ObtenM(ref this.cp);
                    m     = this.indexaM(m);
                    if (this.cp < MetodosAuxiliares.FinalPrograma(this.memoria.Inicio, this.memoria.Tamaño))
                    {
                        if (MetodosAuxiliares.hexadecimalADecimal(m) <= MetodosAuxiliares.FinalPrograma(this.memoria.Inicio, this.memoria.Tamaño))
                        {
                            switch (codOp)
                            {
                            case "18":    //ADD
                                mensaje = this.ADD(m);
                                break;

                            case "40":    //AND
                                mensaje = this.AND(m);
                                break;

                            case "28":    //COMP
                                mensaje = this.COMP(m);
                                break;

                            case "24":    //DIV
                                mensaje = this.DIV(m);
                                break;

                            case "3C":    //J
                                mensaje = this.J(m);
                                break;

                            case "30":    //JEQ
                                mensaje = this.JEQ(m);
                                break;

                            case "34":    //JGT
                                mensaje = this.JGT(m);
                                break;

                            case "38":    //JLT
                                mensaje = this.JLT(m);
                                break;

                            case "48":    //JSUB
                                mensaje = this.JSUB(m);
                                break;

                            case "00":    //LDA
                                mensaje = this.LDA(m);
                                break;

                            case "50":    //LDCH
                                mensaje = this.LDCH(m);
                                break;

                            case "08":    //LDL
                                mensaje = this.LDL(m);
                                break;

                            case "04":    //LDX
                                mensaje = this.LDX(m);
                                break;

                            case "20":    //MUL
                                mensaje = this.MUL(m);
                                break;

                            case "44":    //OR
                                mensaje = this.OR(m);
                                break;

                            case "D8":    //RD
                                mensaje = this.RD(m);
                                break;

                            case "4C":    //RSUB
                                mensaje = this.RSUB();
                                break;

                            case "0C":    //STA
                                mensaje = this.STA(m);
                                break;

                            case "54":    //STCH
                                mensaje = this.STCH(m);
                                break;

                            case "14":    //STL
                                mensaje = this.STL(m);
                                break;

                            case "E8":    //STSW
                                mensaje = this.STSW(m);
                                break;

                            case "10":    //STX
                                mensaje = this.STX(m);
                                break;

                            case "1C":    //SUB
                                mensaje = this.SUB(m);
                                break;

                            case "E0":    //TD
                                //mensaje = this.TD(m);
                                break;

                            case "2C":    //TIX
                                mensaje = this.TIX(m);
                                break;

                            case "DC":    //WD
                                //mensaje = this.WD(m);
                                break;
                            }
                        }
                        else
                        {
                            throw new EndProgramException("Error se intento acceder a una localidad de memoria inexistente");
                        }
                    }
                    else
                    {
                        throw new EndProgramException("Se acabaron las intrucciones a ejecutar, por lo tanto el programa finalizo");
                    }
                }
            }
            catch (EndProgramException e)
            {
                this.ejecutable = false;
                MessageBox.Show(e.Message, "El programa ah finalizado", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            return(mensaje);
        }
Esempio n. 3
0
 private void llenaDataGrid()
 {
     this.limpiaDatagrid();
     string[] fila;
     fila = new string[17];
     for (int i = 0; i < sicEstandar.Memoria.Filas; i++)
     {
         fila[0] = MetodosAuxiliares.decimalAHexadecimal(MetodosAuxiliares.hexadecimalADecimal(sicEstandar.Memoria.Inicio) + (i * 16));
         for (int j = 0; j < sicEstandar.Memoria.Columnas; j++)
         {
             fila[j + 1] = sicEstandar.Memoria.Mapa[i, j];
         }
         this.dataGridViewMapaDeMemoria.Rows.Add(fila);
     }
     this.dataGridViewRegistros.Rows.Add("CP", CP, MetodosAuxiliares.ajustaDireccion(MetodosAuxiliares.decimalAHexadecimal(this.sicEstandar.CP)));
     this.dataGridViewRegistros.Rows.Add("A", A, MetodosAuxiliares.ajustaDireccion(MetodosAuxiliares.decimalAHexadecimal(this.sicEstandar.A)));
     this.dataGridViewRegistros.Rows.Add("X", X, MetodosAuxiliares.ajustaDireccion(MetodosAuxiliares.decimalAHexadecimal(this.sicEstandar.X)));
     this.dataGridViewRegistros.Rows.Add("L", L, MetodosAuxiliares.ajustaDireccion(MetodosAuxiliares.decimalAHexadecimal(this.sicEstandar.L)));
     this.dataGridViewRegistros.Rows.Add("CC", this.sicEstandar.CC, "");
     this.label1.Text = "Tamaño del programa:" + this.sicEstandar.Memoria.Tamaño;
 }
Esempio n. 4
0
        private string TIX(string m)
        {
            string mensaje;

            string[] operando;
            long     decM;

            mensaje = "Efecto: X ← (X) + 1; (X) : (m..m+2) \n" +
                      "Incrementa el valor de X en 1 y lo compara con una \n" +
                      "palabra en memoria y establece el código de \n" +
                      "condición para indicar el resultado(<, = o >) \n";
            operando = this.obtenOperando(m);
            mensaje  = "\t X ← " + MetodosAuxiliares.decimalAHexadecimal(this.x) + " + 1; " + MetodosAuxiliares.decimalAHexadecimal(this.x)
                       + " : " + operando[0] + operando[1] + operando[2] + "\n";
            decM = MetodosAuxiliares.hexadecimalADecimal(operando[0] + operando[1] + operando[2]);
            this.x++;
            if (this.x == decM)
            {
                this.cc = "=";
            }
            else if (this.x > decM)
            {
                this.cc = ">";
            }
            else if (this.x < decM)
            {
                this.cc = "<";
            }
            mensaje += "\t\t Resultado: X ← " + MetodosAuxiliares.decimalAHexadecimal(this.x) + "; CC ← " + this.cc;
            return(mensaje);
        }
        private void creaArchivoObj()
        {
            string linea;

            string[] instruccion;
            this.archivoObj = new List <string>();
            instruccion     = this.intermedio.First().Split('\t');
            linea           = instruccion[3].Replace("H", "");
            linea           = linea.Replace("h", "");
            linea           = "H" + MetodosAuxiliares.ajustaCadena(instruccion[1], 6) + MetodosAuxiliares.ajustaDireccion(linea) +
                              MetodosAuxiliares.ajustaDireccion(MetodosAuxiliares.decimalAHexadecimal(this.tamaño));
            this.archivoObj.Add(linea);
            this.generaRegistrosT();
            instruccion = this.intermedio.Last().Split('\t');
            linea       = "E" + this.calculaDireccionEnd(instruccion[3]);
            this.archivoObj.Add(linea);
        }
        public void paso2(DataGridView dataGridViewIntermedio)
        {
            bool   x;
            int    resto;
            string aux;

            char[]   cadena;
            string[] linea;
            this.codigoObj = new string[this.intermedio.Count];
            for (int i = 0; i < this.intermedio.Count; i++)
            {
                linea = this.intermedio[i].Split('\t');
                if (!string.IsNullOrEmpty(linea[2]))
                {
                    if (!this.lineasError[i])
                    {
                        if (this.instrucciones.Keys.Contains(linea[2]) | linea[2].Equals("WORD") | linea[2].Equals("BYTE"))
                        {
                            switch (linea[2])
                            {
                            case "BYTE":
                                #region Byte
                                if (linea[3].Contains("X") | linea[3].Contains("x"))
                                {
                                    //FE
                                    codigoObj[i] = linea[3].Replace("X'", "");
                                    codigoObj[i] = codigoObj[i].Replace("x'", "");
                                    codigoObj[i] = codigoObj[i].Replace("'", "");
                                }
                                else
                                {
                                    codigoObj[i] = linea[3].Replace("C'", "");
                                    codigoObj[i] = codigoObj[i].Replace("c'", "");
                                    codigoObj[i] = codigoObj[i].Replace("'", "");
                                    codigoObj[i] = MetodosAuxiliares.ASCIIToHexadecimal(codigoObj[i]);
                                }
                                #endregion
                                break;

                            case "WORD":
                                #region WORD
                                x            = linea[3].Contains("H") | linea[3].Contains("h");
                                codigoObj[i] = linea[3].Replace("h", "");
                                codigoObj[i] = linea[3].Replace("H", "");
                                if (!x)
                                {
                                    codigoObj[i] = MetodosAuxiliares.decimalAHexadecimal(int.Parse(codigoObj[i]));
                                }
                                if (codigoObj[i].Length < 6)
                                {
                                    resto = 6 - codigoObj[i].Length;
                                    aux   = "";
                                    for (int j = 0; j < resto; j++)
                                    {
                                        aux += "0";
                                    }
                                    codigoObj[i] = aux + codigoObj[i];
                                }
                                else if (codigoObj[i].Length > 6)
                                {
                                    codigoObj[i] = codigoObj[i].Substring(0, 6);
                                }
                                #endregion
                                break;

                            default:
                                #region Instrucciones
                                if (!linea[2].Equals("RSUB"))
                                {
                                    linea[3] = linea[3].Replace(" ", "");
                                    x        = linea[3].Contains(",X") | linea[3].Contains(",x");
                                    linea[3] = linea[3].Replace(",X", "");
                                    linea[3] = linea[3].Replace(",x", "");
                                    if (this.tabSim.Keys.Contains(linea[3]))
                                    {
                                        codigoObj[i] = this.instrucciones[linea[2]] + MetodosAuxiliares.decimalAHexadecimal(this.tabSim[linea[3]]);
                                    }
                                    else
                                    {
                                        codigoObj[i] = this.instrucciones[linea[2]] + "7FFF";
                                    }
                                    if (x)
                                    {
                                        codigoObj[i] = MetodosAuxiliares.hexadecimalABinario(codigoObj[i]);
                                        cadena       = codigoObj[i].ToCharArray();
                                        cadena[8]    = '1';
                                        codigoObj[i] = new string(cadena);
                                        codigoObj[i] = MetodosAuxiliares.decimalAHexadecimal(MetodosAuxiliares.binarioADecimal(codigoObj[i]));
                                    }
                                }
                                else
                                {
                                    codigoObj[i] = this.instrucciones[linea[2]] + "0000";
                                }
                                #endregion
                                break;
                            }
                        }
                        else
                        {
                            codigoObj[i] = "---";
                        }
                    }
                    else
                    {
                        codigoObj[i] = "Error: de Sintaxis";
                    }
                }
                else
                {
                    this.codigoObj[i] = "Error: Linea vacia";
                }
            }
            this.ensamblaIntermedio(dataGridViewIntermedio);
            this.creaArchivoObj();
        }
        public void paso1(DataGridView dataGridViewIntermedio)
        {
            string[]        codigo;
            MyErrorListener errorListener;

            this.lineasError = new List <bool>();
            this.errores     = new List <string>();
            this.intermedio  = new List <string>();
            this.tabSim      = new Dictionary <string, long>();
            for (int i = 0; i < this.Archivo.Count; i++)
            {
                lexer         = new SICEstandarLexer(new AntlrInputStream(this.Archivo[i]));
                tokens        = new CommonTokenStream(lexer);
                parser        = new SICEstandarParser(tokens);
                errorListener = new MyErrorListener(i + 1);
                parser.AddErrorListener(errorListener);
                parser.prog();
                codigo = this.Archivo[i].Split('\t');
                this.lineasError.Add(errorListener.ExisteError);
                if (!errorListener.ExisteError)
                {
                    try
                    {
                        if (!codigo[1].Equals("START") && !codigo[1].Equals("END"))
                        {
                            this.ensamblaIntermedio(dataGridViewIntermedio, codigo, i, "No");
                            if (!string.IsNullOrEmpty(codigo[0]))
                            {
                                this.TabSim.Add(codigo[0], this.cp);
                            }
                            this.incrementaInstruccionDirectiva(codigo);
                        }
                        else if (codigo[1].Equals("START"))
                        {
                            codigo[2] = codigo[2].ToUpper();
                            if (codigo[2].Contains("H"))
                            {
                                this.cp = MetodosAuxiliares.hexadecimalADecimal(codigo[2].Replace("H", ""));
                                this.ensamblaIntermedio(dataGridViewIntermedio, codigo, i, "No");
                            }
                            else
                            {
                                this.cp = long.Parse(codigo[2]);
                                this.ensamblaIntermedio(dataGridViewIntermedio, codigo, i, "no");
                            }
                        }
                        else if (codigo[1].Equals("END"))
                        {
                            //this.intermedio.Add(this.cp.ToString() + "\t" + this.archivo[i]);
                            this.ensamblaIntermedio(dataGridViewIntermedio, codigo, i, "no");
                        }
                    }
                    catch (ArgumentException)
                    {
                        this.errores.Add("Linea" + (i + 1).ToString() + ": Error Simbolo repetido");
                        dataGridViewIntermedio.Rows.Remove(dataGridViewIntermedio.Rows[dataGridViewIntermedio.Rows.Count - 1]);
                        this.intermedio.Remove(this.intermedio.Last());
                        //this.intermedio.Add(this.cp.ToString() + "\t" + this.archivo[i] + "*");
                        this.ensamblaIntermedio(dataGridViewIntermedio, codigo, i, "Simbolo");
                        this.incrementaInstruccionDirectiva(codigo);
                    }
                }
                else
                {
                    if (!string.IsNullOrEmpty(this.Archivo[i]))
                    {
                        if (this.instrucciones.Keys.Contains(codigo[1]) || this.Directivas.Contains(codigo[1]) || codigo[1].Equals("WORD"))
                        {
                            if (this.instrucciones.Keys.Contains(codigo[0]) || this.Directivas.Contains(codigo[0]) || codigo[0].Equals("WORD"))
                            {
                                this.errores.Add("Linea" + (i + 1).ToString() + ": Error de sintaxis la etiqueta no puede ser la palabra reservada \"" + codigo[0] + "\"");
                                this.ensamblaIntermedio(dataGridViewIntermedio, codigo, i, "Syntax");
                            }
                            else
                            {
                                this.errores.Add("Linea" + (i + 1).ToString() + ": Error de sintaxis el operando: \"" + codigo[2] + "\" Esta mal escrito");
                                this.ensamblaIntermedio(dataGridViewIntermedio, codigo, i, "Syntax");
                            }
                        }
                        else
                        {
                            this.errores.Add("Linea" + (i + 1).ToString() + ": Error instruccion \"" + codigo[1] + "\" no existe");
                            this.ensamblaIntermedio(dataGridViewIntermedio, codigo, i, "Instruccion");
                        }
                    }
                    else
                    {
                        this.errores.Add("Linea" + (i + 1).ToString() + ": Error de sintaxis no debe haber lineas vacias");
                        codigo = new string[] { "\t", "\t", "\t" };
                        this.ensamblaIntermedio(dataGridViewIntermedio, codigo, i, "Vacia");
                    }
                }
            }
            this.paso1Logrado = true;
        }
Esempio n. 8
0
 private AcessoSteps()
 {
     Auxiliar = new MetodosAuxiliares();
     HomePage = new HomePageObj();
 }
Esempio n. 9
0
 private CadastrarSteps()
 {
     Cadastrar = new CadastroPageObj();
     Auxiliar  = new MetodosAuxiliares();
     HomePage  = new HomePageObj();
 }