Exemple #1
0
        public Indexado(string NombreRegistroD, string NombreRegistroDesplazamiento,
                        ResultadosCompilacion resultados, LineaLexica cs, TipoInstruccion tipo) : base(cs, tipo)
        {
            this.NombreRegistroDesplazamiento = NombreRegistroDesplazamiento;

            this.NombreRegistroD = NombreRegistroD;

            Destino       = Registros.PorNombre(NombreRegistroD);
            TamañoDestino = TamañoRegistro(NombreRegistroD);
        }
Exemple #2
0
        public Inmediato(string NombreRegistroD, Numero Fuente,
                         ResultadosCompilacion resultados, LineaLexica cs, TipoInstruccion tipo) : base(cs, tipo)
        {
            this.NombreRegistroD = NombreRegistroD.ToUpper();
            Destino       = Registros.PorNombre(this.NombreRegistroD);
            TamañoDestino = TamañoRegistro(this.NombreRegistroD);


            this.Fuente  = Fuente;
            TamañoFuente = this.Fuente.Tamaño;


            if (TamañoFuente > TamañoDestino)
            {
                resultados.ResultadoCompilacion($"El valor '{Fuente.Hex}' - {TamañoFuente} sobrepasa el tamaño del operando de destino '{this.NombreRegistroD}' - {TamañoDestino}", LineaDocumento);
            }
        }
Exemple #3
0
        public PorRegistro(string NombreRegistroD, string NombreRegistroF, ResultadosCompilacion resultados,
                           LineaLexica cs, TipoInstruccion tipo) : base(cs, tipo)
        {
            this.NombreRegistroF = NombreRegistroF;
            this.NombreRegistroD = NombreRegistroD;

            Destino       = Registros.PorNombre(NombreRegistroD);
            TamañoDestino = TamañoRegistro(NombreRegistroD);

            Fuente       = Registros.PorNombre(NombreRegistroF);
            TamañoFuente = TamañoRegistro(NombreRegistroF);


            if (TamañoFuente != TamañoDestino)
            {
                resultados.ResultadoCompilacion($"El tamaño de '{NombreRegistroF}' - {TamañoFuente} no conicide con el tamaño de '{NombreRegistroD.ToUpper()}' - {TamañoDestino}", LineaDocumento);
            }
        }
Exemple #4
0
        public Indirecto(string NombreRegistroD, string NombreRegistroF, ResultadosCompilacion resultados,
                         LineaLexica cs, TipoInstruccion tipo) : base(cs, tipo)
        {
            this.NombreRegistroF = NombreRegistroF;
            this.NombreRegistroD = NombreRegistroD;

            Destino       = Registros.PorNombre(NombreRegistroD);
            TamañoDestino = TamañoRegistro(NombreRegistroD);


            Fuente       = Registros.PorNombre(NombreRegistroF);
            TamañoFuente = TamañoRegistro(NombreRegistroF);

            //Validar que la dirección sea valdida?
            //if (TamañoFuente != TamañoDestino)
            //{
            //    resultados.ResultadoCompilacion($"El tamaño de '{NombreRegistroF}' - {TamañoFuente} no conicide con el tamaño de '{NombreRegistroD.ToUpper()}' - {TamañoDestino}", LineaDocumento);
            //}
        }
Exemple #5
0
 private bool Salto(LineaLexica linea)
 {
     if (linea[0].TipoToken != TipoToken.PalabraReservada)
     {
         return(false);
     }
     if (linea.Elementos != 2)
     {
         this.Errores.ResultadoCompilacion("Se esperaba un salto, formato incorrecto", linea.LineaDocumento);
         return(true);
     }
     if (linea[0].TipoToken == TipoToken.PalabraReservada && linea[1].TipoToken == TipoToken.Identificador)
     {
         TipoInstruccion instruccion = (TipoInstruccion)Enum.Parse(typeof(TipoInstruccion), linea[0].Lexema.ToUpper());
         this.CodeSegment.AgregarInstruccion(new Salto(linea[1].Lexema, linea, instruccion));
         return(true);
     }
     return(false);
 }
Exemple #6
0
 /// <summary>
 /// Modo indirecto MOV AX,[SI]/[DI]
 /// </summary>
 /// <param name="linea"></param>
 /// <param name="Errores"></param>
 /// <param name="tipo"></param>
 /// <returns></returns>
 protected override Instruccion EsValida(LineaLexica linea, ResultadosCompilacion Errores, TipoInstruccion tipo)
 {
     return(new Indirecto(linea[1].Lexema, linea[4].Lexema, Errores, linea, tipo));
 }
Exemple #7
0
 protected override Instruccion EsValida(LineaLexica linea, ResultadosCompilacion Errores, TipoInstruccion tipo)
 {
     throw new NotImplementedException();
 }
Exemple #8
0
 public Simple(string NombreOperador, LineaLexica LineaDocumento, TipoInstruccion tipo) : base(LineaDocumento, tipo)
 {
     this.NombreOperador = NombreOperador;
     this.Tamaño         = TamañoRegistro(NombreOperador);
     this.Operador       = Registros.PorNombre(NombreOperador);
 }
Exemple #9
0
        /// <summary>
        /// Modo inmediato MOV AX,09h
        /// </summary>
        /// <param name="linea"></param>
        /// <param name="Errores"></param>
        /// <param name="tipo"></param>
        /// <returns></returns>
        protected override Instruccion EsValida(LineaLexica linea, ResultadosCompilacion Errores, TipoInstruccion tipo)
        {
            Numero numero = new Numero(linea[3]);

            if (numero.Tamaño == Tamaños.Invalido)
            {
                Errores.ResultadoCompilacion($"Valor númerico incorrecto", linea.LineaDocumento);
            }
            return(new Inmediato(linea[1].Lexema, numero, Errores, linea, tipo));
        }
Exemple #10
0
        /// <summary>
        /// DirectoI [001],AX
        /// </summary>
        /// <param name="linea"></param>
        /// <param name="Errores"></param>
        /// <param name="tipo"></param>
        /// <returns></returns>
        protected override Instruccion EsValida(LineaLexica linea, ResultadosCompilacion Errores, TipoInstruccion tipo)
        {
            Numero numero = new Numero(linea[2]);

            if (numero.Tamaño == Tamaños.Invalido)
            {
                Errores.ResultadoCompilacion($"Valor númerico incorrecto", linea.LineaDocumento);
            }
            else if (numero.Tamaño < Tamaños.Palabra)
            {
                numero.ByteEnPalabra();
            }
            return(new DirectoI(linea[5].Lexema, numero, Errores, linea, tipo));
        }
Exemple #11
0
 public Direccionamiento(LineaLexica cs, TipoInstruccion tipo) : base(cs, tipo)
 {
 }
Exemple #12
0
 public Etiqueta(string Identificador, LineaLexica LineaDocumento, TipoInstruccion Tipo) : base(LineaDocumento, Tipo)
 {
     this.Identificador = Identificador;
 }
Exemple #13
0
 /// <summary>
 /// Modo indexado MOV AX,[BX + SI/DI ]
 /// </summary>
 /// <param name="linea"></param>
 /// <param name="Errores"></param>
 /// <param name="tipo"></param>
 /// <returns></returns>
 protected override Instruccion EsValida(LineaLexica linea, ResultadosCompilacion Errores, TipoInstruccion tipo)
 {
     if (linea.Elementos >= 8)
     {
         return(new Indexado(linea[1].Lexema, linea[6].Lexema, Errores, linea, tipo));
     }
     return(new Indexado(linea[1].Lexema, linea[4].Lexema, Errores, linea, tipo));
 }
Exemple #14
0
 public DefineByte(LineaLexica LineaDocumento, TipoInstruccion Tipo) : base(LineaDocumento, Tipo)
 {
     this.Valores = new List <Numero>();
 }
Exemple #15
0
 public Begin(LineaLexica LineaDocumento, TipoInstruccion Tipo) : base(LineaDocumento, Tipo)
 {
 }
Exemple #16
0
 protected Instruccion(LineaLexica Linea, TipoInstruccion Tipo)
 {
     this.Tipo           = Tipo;
     this.LineaDocumento = Linea?.LineaDocumento;
     this.Linea          = Linea?.ToString();
 }
Exemple #17
0
        public DirectoI(string NombreRegistro, Numero Fuente, ResultadosCompilacion resultados, LineaLexica cs, TipoInstruccion tipo) : base(NombreRegistro, Fuente, resultados, cs, tipo)
        {
            NombreRegistroD = NombreRegistro;
            Destino         = Registros.PorNombre(NombreRegistro);
            TamañoDestino   = TamañoRegistro(NombreRegistroD);

            this.Fuente  = Fuente;
            TamañoFuente = this.Fuente.Tamaño;

            //Validar que la dirección sea valdida?
            //if (TamañoFuente > TamañoDestino)
            //{
            //    resultados.ResultadoCompilacion($"El valor '{Fuente.Hex}' - {TamañoFuente} sobrepasa el tamaño del operando de destino '{NombreRegistro.ToUpper()}' - {TamañoDestino}", LineaDocumento);
            //}
        }
Exemple #18
0
 protected abstract Instruccion EsValida(LineaLexica linea, ResultadosCompilacion Errores, TipoInstruccion tipo);
Exemple #19
0
 public Salto(string Etiqueta, LineaLexica Linea, TipoInstruccion Tipo) : base(Linea, Tipo)
 {
     this.Etiqueta = Etiqueta;
 }
Exemple #20
0
 public ReturnControl(LineaLexica LineaDocumento, TipoInstruccion Tipo) : base(LineaDocumento, Tipo)
 {
 }