/// <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)); }
/// <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)); }
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); } }
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); } }