Beispiel #1
0
        /// <summary>Verifica una linea de código.</summary>
        /// <param name="linea">La linea a verificar.</param>
        /// <param name="etiquetasUsadas">La lista de etiquetas usadas.
        /// </param>
        /// <param name="l_fichero">La linea en la que se encuentra la
        /// instrucción</param>
        /// <exception cref="gSimple2.Ensamblador.ErrorCodigoException">
        /// Si la instrucción no es correcta.</exception>

        public void Verificar(String linea,
                              Hashtable etiquetasUsadas,
                              int l_fichero)
        {
            int numero = 0;

            String[] op = EnsambladorSimple2.SepararOperandos(linea);

            if (op.Length != 2)
            {
                throw new ErrorCodigoException(String.Format(
                                                   TextManager.GetText("Ens_err_parame1"), op[0]));
            }

            try
            {
                numero = Int32.Parse(op[1]);
            }
            catch (Exception)
            {
                throw new ErrorCodigoException
                          (TextManager.GetText("Ens_err_parm1_numero"));
            }
            if ((numero > 2047) || (numero < 0))
            {
                throw new ErrorCodigoException
                          (TextManager.GetText("Ens_err_parame_fr"));
            }
        }
Beispiel #2
0
        /// <summary>Compila una linea de código</summary>
        /// <param name="linea">La linea a codificar</param>
        /// <param name="etiquetasDeclaradas>La lista de etiquetas declaradas
        /// con su posición.</param>
        /// <returns>El código ensamblado en binario</returns>

        public short Compilar(String linea, Hashtable etiquetasDeclaradas)
        {
            String[] inst = EnsambladorSimple2.SepararOperandos(linea);

            int opc       = (int)opcodes[inst[0]];
            int numero    = Int32.Parse(inst[1]);
            int resultado = (opc << 11);

            resultado |= numero;

            return((short)resultado);
        }
        /// <summary>Verifica una linea de código.</summary>
        /// <param name="linea">La linea a verificar.</param>
        /// <param name="etiquetasUsadas">La lista de etiquetas usadas.
        /// </param>
        /// <param name="l_fichero">La linea en la que se encuentra la
        /// instrucción</param>
        /// <exception cref="gSimple2.Ensamblador.ErrorCodigoException">
        /// Si la instrucción no es correcta.</exception>

        public void Verificar(String linea,
                              Hashtable etiquetasUsadas,
                              int l_fichero)
        {
            String[] op = EnsambladorSimple2.SepararOperandos(linea);
            if (op.Length != 2)
            {
                throw new ErrorCodigoException(String.Format(
                                                   TextManager.GetText("Ens_err_parame1"), op[0]));
            }
            int direccion = 0;

            try
            {
                direccion = Int32.Parse(op[1]);
                if ((direccion > 2047) || (direccion < 0))
                {
                    throw new ErrorCodigoException
                              (TextManager.GetText("Ens_err_parame_fr"));
                }
            }
            catch (ErrorCodigoException)
            {
                throw;
            }
            catch (Exception)
            {
                //Entonces es que usamos una etiqueta
                //Comprobamos que la etiqueta sea correcta.
                EnsambladorSimple2.ComprobarFormatoEtiqueta(op[1]);
                ArrayList l = (ArrayList)etiquetasUsadas[op[1]];
                if (l == null)
                {
                    l = new ArrayList();
                    l.Add(l_fichero);
                    etiquetasUsadas.Add(op[1], l);
                }
                else
                {
                    l.Add(l_fichero);
                }
            }
        }
        /// <summary>Compila una linea de código</summary>
        /// <param name="linea">La linea a codificar</param>
        /// <param name="etiquetasDeclaradas>La lista de etiquetas declaradas
        /// con su posición.</param>
        /// <returns>El código ensamblado en binario</returns>

        public short Compilar(String linea,
                              Hashtable etiquetasDeclaradas)
        {
            String[] inst      = EnsambladorSimple2.SepararOperandos(linea);
            int      opc       = (int)opcodes[inst[0]];
            int      direccion = 0;

            try
            {
                direccion = Int32.Parse(inst[1]);
            }
            catch (Exception)
            {
                direccion = ((Pos_etiqueta)
                             etiquetasDeclaradas[inst[1]]).linea_salida;
            }
            int instruccion = opc << 11;

            instruccion |= (direccion & 0x01FF);
            return((short)instruccion);
        }