public static void SUBWF(string commandAsString) { int myLiteralAsNum = Convert.ToInt32(commandAsString, 16); // string zu int konvertieren string binary = Convert.ToString(myLiteralAsNum, 2); // int zu Binärstring konvertieren string fLiteralbinary = binary.Substring(3, 7); //Argument, Adresse f auslesen string dLiteralbinary = binary.Substring(2, 1); // Argument d auslesen ob 1 oder 0 int fAsInt = Convert.ToInt32(fLiteralbinary, 2); //Binäradresse wird als Int gespeichert byte fAsByteUnchecked = Convert.ToByte(fAsInt); byte fAsByte = CheckIndirectAddressing(fAsByteUnchecked); //Indirekte Adressierung wird überprüft var fWertvar = Registerspeicher.getRegisterWert(fAsByte); var w = Registerspeicher.W; var resultTemp = (ushort)(fWertvar - w); var result = (byte)resultTemp; if (dLiteralbinary == "0") { Registerspeicher.W = result; } else if (dLiteralbinary == "1") { Registerspeicher.setRegisterWert(fAsByte, result); } else { MessageBox.Show("Problem SUBWF - d is not defined"); } Registerspeicher.SetZeroFlag(result); Registerspeicher.SetCarryFlag(resultTemp, true); Registerspeicher.SetDigitCarryFlag((byte)((fWertvar & 0xF) - (w & 0xF)), true); }
public static void ADDLW(string commandAsString) { byte myLiteralAsByte = ConvertStringToByte(commandAsString, 2, 2); //Argument von Befehl trennen var w = Registerspeicher.W; var resultTemp = (ushort)(myLiteralAsByte + w); var result = (byte)resultTemp; Registerspeicher.W = (byte)(w + myLiteralAsByte); // addiere w mit Literal Registerspeicher.SetZeroFlag(Registerspeicher.W); Registerspeicher.SetCarryFlag(resultTemp); Registerspeicher.SetDigitCarryFlag((byte)((myLiteralAsByte & 0xF) + (w & 0xF))); }
public static void SUBLW(string commandAsString) { byte myLiteralAsByte = ConvertStringToByte(commandAsString, 2, 2); //Argument von Befehl trennen var w = Registerspeicher.W; var resultTemp = (ushort)(myLiteralAsByte - w); var result = (byte)resultTemp; Registerspeicher.W = (byte)(myLiteralAsByte - w); // subtrahier w vom Literal Registerspeicher.SetZeroFlag(Registerspeicher.W); Registerspeicher.SetCarryFlag(resultTemp, true); Registerspeicher.SetDigitCarryFlag((byte)((myLiteralAsByte & 0xF) - (w & 0xF)), true); }