Ejemplo n.º 1
0
        private string AND(string m)
        {
            char[] aux;
            string mensaje;
            string binA;
            string binM;

            string[] operando;
            operando = this.obtenOperando(m);
            binA     = MetodosAuxiliares.hexadecimalABinario(MetodosAuxiliares.decimalAHexadecimal(this.a));
            binM     = MetodosAuxiliares.hexadecimalABinario(operando[0] + operando[1] + operando[2]);
            aux      = new char[binA.Length];
            mensaje  = "Efecto: A ← (A) & (m, m+1, m+2)\n";
            mensaje += "\t A ← " + MetodosAuxiliares.decimalAHexadecimal(this.a)
                       + " & " + operando[0] + operando[1] + operando[2] + "\n";
            for (int i = 0; i < aux.Length; i++)
            {
                if (binA[i].Equals('1') & binM[i].Equals('1'))
                {
                    aux[i] = '1';
                }
                else
                {
                    aux[i] = '0';
                }
            }

            this.a   = MetodosAuxiliares.binarioADecimal(new string(aux));
            mensaje += "\t\t Resultado: A ← " + MetodosAuxiliares.decimalAHexadecimal(this.a);
            return(mensaje);
        }
Ejemplo n.º 2
0
        private string indexaM(string m)
        {
            char[] aux;
            long   maux;

            aux = MetodosAuxiliares.hexadecimalABinario(m).ToCharArray();
            if (aux[0].Equals('1'))
            {
                aux[0] = '0';
                maux   = MetodosAuxiliares.binarioADecimal(new string(aux));
                maux  += this.x;
                m      = MetodosAuxiliares.decimalAHexadecimal(maux);
            }
            return(m);
        }
 private string ensamblaInstruccion3(string codOp, string operando, string cpSig)
 {
     string codigoObj;
     char[] nixbpe;
     codigoObj = "";
     nixbpe = new char[6];
     codigoObj = MetodosAuxiliares.hexadecimalABinario(this.instruccionesFormato3[codOp]).Substring(4,2);
     nixbpe[5] = '0';
     if (!codOp.Equals("RSUB"))
     {
         codOp = this.instruccionesFormato3[codOp][0].ToString();
         switch (operando.First())
         {
             case '@'://Direccionamiento Indirecto
                 nixbpe[0] = '1';
                 nixbpe[1] = '0';
                 nixbpe[2] = '0';
                 operando = operando.Replace("@","");
             break;
             case '#'://Direccionamiento Inmediato
                 nixbpe[0] = '0';
                 nixbpe[1] = '1';
                 nixbpe[2] = '0';
                 operando = operando.Replace("#", "");
                 break;
             default://Direccionamiento Simple
                 nixbpe[0] = '1';
                 nixbpe[1] = '1';
                 if (operando.Contains(",X") | operando.Contains(",x"))
                 {
                     operando = operando.Replace(",X", "");
                     operando = operando.Replace(",x", "");
                     nixbpe[2] = '1';
                 }
                 else
                 {
                     nixbpe[2] = '0';
                 }
                 break;
         }
         if (this.tabSim.Keys.Contains(operando))
         {
             this.determinaBanderas(ref nixbpe, ref operando, cpSig);
         }
         else
         {
             bool h;
             h = operando.Last().Equals('H') | operando.Last().Equals('h');
             if (h)
             {
                 operando = operando.Replace("H", "");
                 operando = operando.Replace("h", "");
             }
             if (Information.IsNumeric(operando))
             {
                 if (h)
                 {
                     operando = MetodosAuxiliares.hexadecimalADecimal(operando).ToString();
                 }
                 int c;
                 c = int.Parse(operando);
                 operando = MetodosAuxiliares.decimalAHexadecimal(c);
                 if (0 <= c & c <= 4095)
                 {
                     nixbpe[3] = '0';
                     nixbpe[4] = '0';
                     operando = MetodosAuxiliares.ajustaOperando(operando, 3, "0");
                 }
                 else
                 {
                     this.determinaBanderas(ref nixbpe, ref operando, cpSig);
                 }
             }
             else
             {
                 nixbpe[3] = '1';
                 nixbpe[4] = '1';
                 operando = "FFF";
             }
         }
         codigoObj += new string(nixbpe);
         codigoObj = codOp + MetodosAuxiliares.decimalAHexadecimal(MetodosAuxiliares.binarioADecimal(codigoObj)) + operando;
     }
     else
     {
         codigoObj = "4F0000";
     }
     return codigoObj;
 }
        public override 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();
        }
        private string ensamblaInstruccion4(string codOp, string operando)
        {

            string codigoObj;
            char[] nixbpe;
            codigoObj = "";
            long dir;
            int resto;
            nixbpe = new char[6];
            codigoObj = MetodosAuxiliares.hexadecimalABinario(this.instruccionesFormato4[codOp]).Substring(0, 6);
            nixbpe[3] = '0';
            nixbpe[4] = '0';
            nixbpe[5] = '1';

            if (!codOp.Equals("RSUB"))
            {
                switch (operando.First())
                {
                    case '@'://Direccionamiento Indirecto
                        nixbpe[0] = '1';
                        nixbpe[1] = '0';
                        nixbpe[2] = '0';
                        operando = operando.Replace("@", "");
                    break;
                    case '#'://Direccionamiento Inmediato
                        nixbpe[0] = '0';
                        nixbpe[1] = '1';
                        nixbpe[2] = '0';
                        operando = operando.Replace("#", "");
                    break;
                    default://Direccionamiento Simple
                        nixbpe[0] = '1';
                        nixbpe[1] = '1';
                        if (operando.Contains(",X") | operando.Contains(",x"))
                        {
                            operando = operando.Replace(",X", "");
                            operando = operando.Replace(",x", "");
                            nixbpe[2] = '1';
                        }
                        else
                        {
                            nixbpe[2] = '0';
                        }
                        break;
                }
                if (tabSim.TryGetValue(operando, out dir))
                {
                    operando = MetodosAuxiliares.decimalAHexadecimal(dir);
                }
                else
                {
                    bool h;
                    h = operando.Last().Equals('H') | operando.Last().Equals('h');
                    if (h)
                    {
                        operando = operando.Replace("H", "");
                        operando = operando.Replace("h", "");
                    }
                    if (Information.IsNumeric(operando))
                    {
                        if (h)
                        {
                            operando = MetodosAuxiliares.hexadecimalADecimal(operando).ToString();
                        }
                        int c;
                        c = int.Parse(operando);
                        if (c > 4095)
                        {
                            operando = MetodosAuxiliares.decimalAHexadecimal(c);
                        }
                        else
                        {
                            operando = "FFFFF";
                        }
                    }
                    else
                    {
                        operando = "FFFFF";
                    }
                }
                if (MetodosAuxiliares.hexadecimalADecimal(operando) > 0)
                {
                    operando = MetodosAuxiliares.ajustaOperando(operando, 5, "0");
                }
                else
                {
                    operando = MetodosAuxiliares.ajustaOperando(operando, 5, "F");
                }
                codigoObj = MetodosAuxiliares.decimalAHexadecimal(MetodosAuxiliares.binarioADecimal(codigoObj + new string(nixbpe))) + operando;
                codigoObj += "*";
            }
            else
            {
                codigoObj = "4F100000*";
            }
            return codigoObj;
        }