예제 #1
0
        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);
        }
예제 #2
0
        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)));
        }
예제 #3
0
        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);
        }