示例#1
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));
        }
示例#2
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));
        }
示例#3
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);
            }
        }
示例#4
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);
            }
        }