private string AND(string m) { char[] aux; string mensaje; string binA; string binM; string[] operando; operando = this.obtenOperando(m); binA = MetodosAuxiliares.hexadecimalABinario(MetodosAuxiliares.decimalAHexadecimal(this.a)); binM = MetodosAuxiliares.hexadecimalABinario(operando[0] + operando[1] + operando[2]); aux = new char[binA.Length]; mensaje = "Efecto: A ← (A) & (m, m+1, m+2)\n"; mensaje += "\t A ← " + MetodosAuxiliares.decimalAHexadecimal(this.a) + " & " + operando[0] + operando[1] + operando[2] + "\n"; for (int i = 0; i < aux.Length; i++) { if (binA[i].Equals('1') & binM[i].Equals('1')) { aux[i] = '1'; } else { aux[i] = '0'; } } this.a = MetodosAuxiliares.binarioADecimal(new string(aux)); mensaje += "\t\t Resultado: A ← " + MetodosAuxiliares.decimalAHexadecimal(this.a); return(mensaje); }
private string indexaM(string m) { char[] aux; long maux; aux = MetodosAuxiliares.hexadecimalABinario(m).ToCharArray(); if (aux[0].Equals('1')) { aux[0] = '0'; maux = MetodosAuxiliares.binarioADecimal(new string(aux)); maux += this.x; m = MetodosAuxiliares.decimalAHexadecimal(maux); } return(m); }
private string ensamblaInstruccion3(string codOp, string operando, string cpSig) { string codigoObj; char[] nixbpe; codigoObj = ""; nixbpe = new char[6]; codigoObj = MetodosAuxiliares.hexadecimalABinario(this.instruccionesFormato3[codOp]).Substring(4,2); nixbpe[5] = '0'; if (!codOp.Equals("RSUB")) { codOp = this.instruccionesFormato3[codOp][0].ToString(); switch (operando.First()) { case '@'://Direccionamiento Indirecto nixbpe[0] = '1'; nixbpe[1] = '0'; nixbpe[2] = '0'; operando = operando.Replace("@",""); break; case '#'://Direccionamiento Inmediato nixbpe[0] = '0'; nixbpe[1] = '1'; nixbpe[2] = '0'; operando = operando.Replace("#", ""); break; default://Direccionamiento Simple nixbpe[0] = '1'; nixbpe[1] = '1'; if (operando.Contains(",X") | operando.Contains(",x")) { operando = operando.Replace(",X", ""); operando = operando.Replace(",x", ""); nixbpe[2] = '1'; } else { nixbpe[2] = '0'; } break; } if (this.tabSim.Keys.Contains(operando)) { this.determinaBanderas(ref nixbpe, ref operando, cpSig); } else { bool h; h = operando.Last().Equals('H') | operando.Last().Equals('h'); if (h) { operando = operando.Replace("H", ""); operando = operando.Replace("h", ""); } if (Information.IsNumeric(operando)) { if (h) { operando = MetodosAuxiliares.hexadecimalADecimal(operando).ToString(); } int c; c = int.Parse(operando); operando = MetodosAuxiliares.decimalAHexadecimal(c); if (0 <= c & c <= 4095) { nixbpe[3] = '0'; nixbpe[4] = '0'; operando = MetodosAuxiliares.ajustaOperando(operando, 3, "0"); } else { this.determinaBanderas(ref nixbpe, ref operando, cpSig); } } else { nixbpe[3] = '1'; nixbpe[4] = '1'; operando = "FFF"; } } codigoObj += new string(nixbpe); codigoObj = codOp + MetodosAuxiliares.decimalAHexadecimal(MetodosAuxiliares.binarioADecimal(codigoObj)) + operando; } else { codigoObj = "4F0000"; } return codigoObj; }
public override void paso2(DataGridView dataGridViewIntermedio) { bool x; int resto; string aux; char[] cadena; string[] linea; this.codigoObj = new string[this.intermedio.Count]; for (int i = 0; i < this.intermedio.Count; i++) { linea = this.intermedio[i].Split('\t'); if (!string.IsNullOrEmpty(linea[2])) { if (!this.lineasError[i]) { if (this.instrucciones.Keys.Contains(linea[2]) | linea[2].Equals("WORD") | linea[2].Equals("BYTE")) { switch (linea[2]) { case "BYTE": #region Byte if (linea[3].Contains("X") | linea[3].Contains("x")) { //FE codigoObj[i] = linea[3].Replace("X'", ""); codigoObj[i] = codigoObj[i].Replace("x'", ""); codigoObj[i] = codigoObj[i].Replace("'", ""); } else { codigoObj[i] = linea[3].Replace("C'", ""); codigoObj[i] = codigoObj[i].Replace("c'", ""); codigoObj[i] = codigoObj[i].Replace("'", ""); codigoObj[i] = MetodosAuxiliares.ASCIIToHexadecimal(codigoObj[i]); } #endregion break; case "WORD": #region WORD x = linea[3].Contains("H") | linea[3].Contains("h"); codigoObj[i] = linea[3].Replace("h", ""); codigoObj[i] = linea[3].Replace("H", ""); if (!x) { codigoObj[i] = MetodosAuxiliares.decimalAHexadecimal(int.Parse(codigoObj[i])); } if (codigoObj[i].Length < 6) { resto = 6 - codigoObj[i].Length; aux = ""; for (int j = 0; j < resto; j++) { aux += "0"; } codigoObj[i] = aux + codigoObj[i]; } else if (codigoObj[i].Length > 6) { codigoObj[i] = codigoObj[i].Substring(0, 6); } #endregion break; default: #region Instrucciones if (!linea[2].Equals("RSUB")) { linea[3] = linea[3].Replace(" ", ""); x = linea[3].Contains(",X") | linea[3].Contains(",x"); linea[3] = linea[3].Replace(",X", ""); linea[3] = linea[3].Replace(",x", ""); if (this.tabSim.Keys.Contains(linea[3])) { codigoObj[i] = this.instrucciones[linea[2]] + MetodosAuxiliares.decimalAHexadecimal(this.tabSim[linea[3]]); } else { codigoObj[i] = this.instrucciones[linea[2]] + "7FFF"; } if (x) { codigoObj[i] = MetodosAuxiliares.hexadecimalABinario(codigoObj[i]); cadena = codigoObj[i].ToCharArray(); cadena[8] = '1'; codigoObj[i] = new string(cadena); codigoObj[i] = MetodosAuxiliares.decimalAHexadecimal(MetodosAuxiliares.binarioADecimal(codigoObj[i])); } } else { codigoObj[i] = this.instrucciones[linea[2]] + "0000"; } #endregion break; } } else { codigoObj[i] = "---"; } } else { codigoObj[i] = "Error: de Sintaxis"; } } else { this.codigoObj[i] = "Error: Linea vacia"; } } this.ensamblaIntermedio(dataGridViewIntermedio); this.creaArchivoObj(); }
private string ensamblaInstruccion4(string codOp, string operando) { string codigoObj; char[] nixbpe; codigoObj = ""; long dir; int resto; nixbpe = new char[6]; codigoObj = MetodosAuxiliares.hexadecimalABinario(this.instruccionesFormato4[codOp]).Substring(0, 6); nixbpe[3] = '0'; nixbpe[4] = '0'; nixbpe[5] = '1'; if (!codOp.Equals("RSUB")) { switch (operando.First()) { case '@'://Direccionamiento Indirecto nixbpe[0] = '1'; nixbpe[1] = '0'; nixbpe[2] = '0'; operando = operando.Replace("@", ""); break; case '#'://Direccionamiento Inmediato nixbpe[0] = '0'; nixbpe[1] = '1'; nixbpe[2] = '0'; operando = operando.Replace("#", ""); break; default://Direccionamiento Simple nixbpe[0] = '1'; nixbpe[1] = '1'; if (operando.Contains(",X") | operando.Contains(",x")) { operando = operando.Replace(",X", ""); operando = operando.Replace(",x", ""); nixbpe[2] = '1'; } else { nixbpe[2] = '0'; } break; } if (tabSim.TryGetValue(operando, out dir)) { operando = MetodosAuxiliares.decimalAHexadecimal(dir); } else { bool h; h = operando.Last().Equals('H') | operando.Last().Equals('h'); if (h) { operando = operando.Replace("H", ""); operando = operando.Replace("h", ""); } if (Information.IsNumeric(operando)) { if (h) { operando = MetodosAuxiliares.hexadecimalADecimal(operando).ToString(); } int c; c = int.Parse(operando); if (c > 4095) { operando = MetodosAuxiliares.decimalAHexadecimal(c); } else { operando = "FFFFF"; } } else { operando = "FFFFF"; } } if (MetodosAuxiliares.hexadecimalADecimal(operando) > 0) { operando = MetodosAuxiliares.ajustaOperando(operando, 5, "0"); } else { operando = MetodosAuxiliares.ajustaOperando(operando, 5, "F"); } codigoObj = MetodosAuxiliares.decimalAHexadecimal(MetodosAuxiliares.binarioADecimal(codigoObj + new string(nixbpe))) + operando; codigoObj += "*"; } else { codigoObj = "4F100000*"; } return codigoObj; }