public void generaCodigoMaquina(baseNumerica contlocFile,CODOP codop,String contLocLabel) { baseNumerica contEtiqueta = new baseNumerica(contLocLabel); baseNumerica contLocNext = new baseNumerica(System.Convert.ToString(contlocFile.getNumberDecimal() + codop.getBytesTotales())); baseNumerica contLocNew = new baseNumerica("0"); fueraRango = false; int valor = contEtiqueta.getNumberDecimal() - contLocNext.getNumberDecimal(); if (valor < 0) { char[] caracteres = { '-' }; String tmp = System.Convert.ToString(valor); tmp = tmp.TrimStart(caracteres); contLocNew = new baseNumerica(tmp,1); tmp = contLocNew.getNumberHexadecimal(); xb = ""; for (int i = (tmp.Length) - (2*codop.getBytesPorCalcular()); i<tmp.Length;i++ ) { xb += tmp[i]; } } else { contLocNew = new baseNumerica(System.Convert.ToString(contEtiqueta.getNumberDecimal() - contLocNext.getNumberDecimal())); xb = contLocNew.getNumberHexadecimal(); xb = xb.PadLeft(2 * codop.getBytesPorCalcular(), '0'); } if(codop.getBytesPorCalcular() == 1) { if (!(contLocNew.getNumberDecimal() >= -128 && contLocNew.getNumberDecimal() <= 127)) { fueraRango = true; } } else { if (!(contLocNew.getNumberDecimal() >= -32768 && contLocNew.getNumberDecimal() <= 32767)) { fueraRango = true; } } }
private void segundoPaso(String cadena) { String codigoMaquina = ""; int tam = cadena.Length; String[] arrayLine = new String[4]; int i = 0,j=0; while (i<tam) { if (cadena[i] != '\t') { arrayLine[j] += cadena[i++]; } else { j++; i++; } } //Cargo las 4 partes de la linea baseNumerica contLocFile = new baseNumerica("$"+arrayLine[0]); LABEL labelFile = new LABEL(arrayLine[1]); codop = new CODOP(arrayLine[2]); OPERANDO operandoFile = new OPERANDO(arrayLine[3]); labelFile.validaEtiqueta(); codop.validaCODOP(); operandoFile.validaOperando(); if(codop.getCodop()=="END") { return; } if (codop.getValido()) { binarySearch(0, 200, codop.getCodop()); codop.revizaModoDireccionamiento(arrayCODOP, arrayTMPCODOP[codop.getIniciaCODOP()].start, arrayTMPCODOP[codop.getIniciaCODOP()].end, operandoFile); } else { txtMensajes.Text += mensajesError[2];//El CODOP no es valido printEnter(); return; } if(!codop.getExiste()) { DIRECTIVA d1 = new DIRECTIVA(codop.getCodop(),operandoFile,labelFile); if (d1.getExiste() && d1.getValida()) { txtMensajes.Text += d1.getCodigoMaquina();//11111111111111111111111Imprimo codigo Maquina de la directiva codigoMaquina = d1.getCodigoMaquina(); if(codigoMaquina != "") { arrayCodMaqinaS1.Add(codigoMaquina); arrayDirS1.Add(contLocFile); } } else { txtMensajes.Text += mensajesError[6];//No se encontro } printEnter(); return; } //Verifico que tipo de direccionamiento tiene y hago creo el codigo maquina en base a eso String xb = ""; switch(codop.getModoDireccionamiento()) { case "INH": txtMensajes.Text += codop.getCodigoMaquina();//22222222222222222222Imprimo codigo Maquina de codop codigoMaquina = codop.getCodigoMaquina(); break; case "DIR": case "EXT": baseNumerica b1 = new baseNumerica("0"); if(operandoFile.getOperando()[0] >= 'A' && operandoFile.getOperando()[0] <= 'Z') { int ilabel = 0,indiceLabel = 0; Boolean labelFound = false; foreach(String lTMP in listaEtiquetas) { if(lTMP == operandoFile.getOriginal()) { indiceLabel = ilabel; labelFound = true; } ilabel++; } if(labelFound) { ilabel = 0; String labelExtendido = ""; foreach(String lTMP in dirEtiquetas) { if(ilabel == indiceLabel) { labelExtendido = lTMP; } ilabel++; }//Finaliza bucle foreach labelExtendido = "$" + labelExtendido; b1 = new baseNumerica(labelExtendido);//333333333333Imprimo codigo maquina de codop txtMensajes.Text += codop.getCodigoMaquina() + System.Convert.ToString(b1.getNumberHexadecimal()).PadLeft(2 * codop.getBytesPorCalcular(), '0'); codigoMaquina = codop.getCodigoMaquina() + System.Convert.ToString(b1.getNumberHexadecimal()).PadLeft(2 * codop.getBytesPorCalcular(), '0'); } else { txtMensajes.Text += mensajesError[8]; //Etiqueta no encontrada } }//Termina cuando es extendido con Etiqueta else { b1 = new baseNumerica(arrayLine[3]);//444444444444444444444444Imprimo codigo maquina de codop txtMensajes.Text += codop.getCodigoMaquina() + System.Convert.ToString(b1.getNumberHexadecimal()).PadLeft(2*codop.getBytesPorCalcular(),'0'); codigoMaquina = codop.getCodigoMaquina() + System.Convert.ToString(b1.getNumberHexadecimal()).PadLeft(2 * codop.getBytesPorCalcular(), '0'); } break; case "IMM": char[] car = {'#'}; arrayLine[3] = arrayLine[3].TrimStart(car); baseNumerica b2 = new baseNumerica(arrayLine[3]);//55555555555555555555Imprimo codigo maquina de codop txtMensajes.Text += codop.getCodigoMaquina() + System.Convert.ToString(b2.getNumberHexadecimal()).PadLeft(2 * codop.getBytesPorCalcular(), '0'); codigoMaquina = codop.getCodigoMaquina() + System.Convert.ToString(b2.getNumberHexadecimal()).PadLeft(2 * codop.getBytesPorCalcular(), '0'); break; case "[IDX2]": int sizeTMP = arrayLine[3].Length - 1; String registro = "", operandoTMP = ""; Boolean band1 = false; for (i=1; i < sizeTMP ;i++ ) { if (arrayLine[3][i]==',') { band1 = true; } else if(!band1) { operandoTMP += arrayLine[3][i]; } else { registro += arrayLine[3][i]; } }//Fin del for switch(registro) { case "X": xb = "E3"; break; case "Y": xb = "EB"; break; case "SP": xb = "F3"; break; case "PC": xb = "FB"; break; } baseNumerica bI16 = new baseNumerica(operandoTMP);//666666666666666Imprimo codigo maquina de codop txtMensajes.Text += codop.getCodigoMaquina() + xb + System.Convert.ToString(bI16.getNumberHexadecimal()).PadLeft(2 * (codop.getBytesPorCalcular()-1), '0'); codigoMaquina = codop.getCodigoMaquina() + xb + System.Convert.ToString(bI16.getNumberHexadecimal()).PadLeft(2 * (codop.getBytesPorCalcular() - 1), '0'); break; case "[D,IDX]": xb = ""; switch(arrayLine[3][3]) { case 'X': xb = "E7"; break; case 'Y': xb = "EF"; break; case 'S': xb = "F7"; break; case 'P': xb = "FF"; break; } txtMensajes.Text += codop.getCodigoMaquina() + xb;//77777777777777777777Imprimo codigo maquina de codop codigoMaquina = codop.getCodigoMaquina() + xb; break; case "IDX": operandoFile.generaXB(codop); txtMensajes.Text += codop.getCodigoMaquina() + operandoFile.getXb().PadLeft(2,'0');//88888888888Imprimo Codigo maquina de codop codigoMaquina = codop.getCodigoMaquina() + operandoFile.getXb().PadLeft(2, '0'); break; case "IDX1": operandoFile.generaXB(codop); txtMensajes.Text += codop.getCodigoMaquina() + operandoFile.getXb();//999999999999999999999Imprimo codigo maquina de codop codigoMaquina = codop.getCodigoMaquina() + operandoFile.getXb(); break; case "IDX2": operandoFile.generaXB(codop); txtMensajes.Text += codop.getCodigoMaquina() + operandoFile.getXb();//AAAAAAAAAAAAAAAImprimo codigo maquina de codop codigoMaquina = codop.getCodigoMaquina() + operandoFile.getXb(); break; case "REL": int indice = 0,tmp = 0; Boolean flagFound = false; foreach (String labelTMP in listaEtiquetas) { if (operandoFile.getOperando() == labelTMP) { indice = tmp; flagFound = true; } tmp++; } if(flagFound) { tmp = 0; String contLocLabel = "$"; foreach(String contlocTMP in dirEtiquetas) { if(tmp == indice) { contLocLabel += contlocTMP; } tmp++; } operandoFile.generaCodigoMaquina(contLocFile,codop,contLocLabel); if (operandoFile.getFueraRango()) { txtMensajes.Text += "FUERA DE RANGO "; if(codop.getBytesPorCalcular() == 1) { txtMensajes.Text += "los rangos permitidos son de -128 hasta 127"; } else { txtMensajes.Text += "los rangos permitidos son de -32768 hasta 32767"; } } else { txtMensajes.Text += codop.getCodigoMaquina().PadLeft(2, '0') + operandoFile.getXb();//BBBBBBBBBBBBBImprimo codigo maquina de codop codigoMaquina = codop.getCodigoMaquina().PadLeft(2, '0') + operandoFile.getXb(); } } else { txtMensajes.Text += mensajesError[8];//Etiqueta no encontrada } break; } //Agregando informacion para posteriormente construir el S1 arrayDirS1.Add(contLocFile); arrayCodMaqinaS1.Add(codigoMaquina); printEnter(); GC.Collect(); }