Beispiel #1
0
        public DIRECTIVA(String directive,OPERANDO operando,LABEL label)
        {
            baseNumerica base1 = new baseNumerica(operando.getOperando());
            //base1.convert2Dec();
            codigoMaquina = "";
            valida = true;
            size = 0;
            valueHex = "";
            if (!base1.getValido() && directive != "FCC" && directive != "END")
            {
                imprimirMensaje = "[Error]El operando contiene valores que no son validos en su base";
                valida = false;
            }
            if (operando.getOperando() == "NULL" && directive != "END")
            {
                imprimirMensaje = "[Error]La Directiva necesita operando";
                valida = false;
            }
            switch (directive)
            {
                case "ORG":
                    existe = true;
                    if (!(base1.getNumberDecimal() >= 0 && base1.getNumberDecimal() <= 65535))
                    {
                       imprimirMensaje = "[Error]Valor invalido para " + directive + " los valores van de 0-65535";
                       valida = false;
                    }
                    break;
                case "END":
                    existe = true;
                    if(operando.getOperando()!="NULL")
                    {
                        imprimirMensaje = "[Error]END no debe llevar operando";
                        valida = false;
                    }
                    break;
                case "DB":
                case "DC.B":
                case "FCB":
                    existe = true;
                    if (base1.getNumberDecimal() >= 0 && base1.getNumberDecimal() <= 255)
                    {
                        size = 1;
                        try
                        {
                            codigoMaquina = base1.getNumberHexadecimal().PadLeft(2, '0');
                        }
                        catch(Exception ex)
                        {
                            imprimirMensaje = "[Error] Valores invalidos para la base";
                            valida = false;
                        }
                    }
                    else
                    {
                        imprimirMensaje = "[Error]Valor invalido para " + directive + " los valores van de 0-255";
                        valida = false;
                    }
                    break;
                case "DW":
                case "DC.W":
                case "FDB":
                    existe = true;
                    if (base1.getNumberDecimal() >= 0 && base1.getNumberDecimal() <= 65535)
                    {
                        size = 2;
                        try
                        {
                            codigoMaquina = base1.getNumberHexadecimal().PadLeft(4, '0');
                        }
                        catch(Exception ex)
                        {
                            imprimirMensaje = "[Error] Valores invalidos para la base";
                            valida = false;
                        }
                    }
                    else
                    {
                        imprimirMensaje = "[Error]Valor invalido para " + directive + " los valores van de 0-65535";
                        valida = false;
                    }
                    break;
                case "FCC":
                    existe = true;
                    if ((@operando.getOperando()[0] == '"' && @operando.getOperando()[operando.getOperando().Length - 1] == '"') && operando.getOperando().Length >= 2)
                    {
                        size = operando.getOperando().Length - 2;
                        baseNumerica b2 = new baseNumerica("0");
                        for (int i = 1; i<operando.getOriginal().Length-1;i++ )
                        {
                            int tmpIntFCC = 0;
                            tmpIntFCC = System.Convert.ToInt16(operando.getOriginal()[i]);
                            b2 = new baseNumerica(System.Convert.ToString(tmpIntFCC));
                            codigoMaquina += b2.getNumberHexadecimal();
                        }
                    }
                    else
                    {
                        imprimirMensaje = "[Error]El operando no tiene ambas comillas";
                        valida = false;
                    }
                    break;
                case "DS":
                case "DS.B":
                case "RMB":
                    existe = true;
                    if (base1.getNumberDecimal() >= 0 && base1.getNumberDecimal() <= 65535)
                    {
                        size = 1 * base1.getNumberDecimal();
                    }
                    else
                    {
                        imprimirMensaje = "[Error]Valor invalido para " + directive + " los valores van de 0-65535";
                        valida = false;
                    }
                    break;
                case "DS.W":
                case "RMW":
                    existe = true;
                    if (base1.getNumberDecimal() >= 0 && base1.getNumberDecimal() <= 65535)
                    {
                        size = 2 * base1.getNumberDecimal();
                    }
                    else
                    {
                        imprimirMensaje = "[Error]Valor invalido para " + directive + " los valores van de 0-65535";
                        valida = false;
                    }
                    break;
                case "EQU":
                    existe = true;

                    if(label.getLabel() == "NULL")
                    {
                        imprimirMensaje = "[Error]EQU debe tener etiqueta";
                        valida = false;
                    }
                    else if (!(base1.getNumberDecimal() >= 0 && base1.getNumberDecimal() <= 65535))
                    {
                        imprimirMensaje += "[Error]Valor invalido para " + directive + " los valores van de 0-65535";
                        valida = false;
                    }
                    else
                    {
                        baseNumerica b1 = new baseNumerica(operando.getOperando());
                        valueHex = b1.getNumberHexadecimal();
                    }
                    break;
                default:
                    existe = valida = false;
                    break;
            }//End switch
        }
Beispiel #2
0
        public void validaDir(String operando)
        {
            //Validar para cuando es extendido por etiqueta
            switch (operando[0])
            {
                case '0':
                case '1':
                case '2':
                case '3':
                case '4':
                case '5':
                case '6':
                case '7':
                case '8':
                case '9':
                case '@':
                case '%':
                case '$':
                case '-':
                case '+':

                    break;
                case '#':
                    encontrado = false;
                    return;
                    break;
                case '[':
                    encontrado = false;
                    return;
                    break;
                default:
                    LABEL etiqueta = new LABEL(operando);
                    etiqueta.validaEtiqueta();
                    if (etiqueta.getValida())
                    {
                        mensajeResultado = "Extendido";
                        modoDireccionamiento = "EXT";
                        encontrado = true;
                        return;
                    }
                    else
                    {
                        mensajeResultado = "Etiqueta no valida para extendido";
                        encontrado = false;
                        return;
                        //Etiqueta no valida Error
                    }
                    break;
            }
            if (operando.Length == 1 && !isDigit(operando[0]))
            {
                mensajeResultado = "Error en directo: Sintaxis (%|@|$ o ninguna base) y despues valores correspondientes a la base";
                encontrado = false;
                return;
            }
            baseNumerica b1 = new baseNumerica(operando);
            //b1.convert2Dec();
            if(!b1.getValido())
            {
                String menbase = "";
                String menVal = "";
                switch(operando[0])
                {
                    case '%':
                        menbase = "Binario";
                        menVal = "1 - 0";
                        break;
                    case '@':
                        menbase = "Octal";
                        menVal = "0 - 7";
                        break;
                    case '$':
                        menbase = "Hexadecimal";
                        menVal = "0-9 o las letras de la A - F";
                        break;
                    default:
                        menbase = "Decimal";
                        menVal = "0 - 9";
                        break;
                }
                mensajeResultado = "Valores invalidos para la base." + menbase + " solo acepta los digitos del " + menVal;
                encontrado = false;
                return;
            }
            if (b1.getNumberDecimal() >= 0 && b1.getNumberDecimal() <= 255)
            {
                mensajeResultado = "Directo";
                modoDireccionamiento = "DIR";
                encontrado = true;
                return;
            }
            else if (b1.getNumberDecimal() >= 256 && b1.getNumberDecimal() <= 65535)
            {
                mensajeResultado = "Extendido";
                modoDireccionamiento = "EXT";
                encontrado = true;
                return;
            }
            else
            {
                mensajeResultado = "Fuera de rango en Extendido";
                encontrado = false;
                return;
                //Fuera de rango
            }
        }