/// <summary> /// Handles the arithmetic instruction. /// </summary> private bool HandleArithmeticInstruction() { try { Alu.Execute(registers[currentInstruction.ParameterOne.Register], registers[currentInstruction.ParameterTwo.Register], currentInstruction.Type); registers['A'] = Alu.R; } catch { return(false); } return(true); }
public void TestADD() { alu.X = "01000000".BinToByte(); alu.Y = "00000001".BinToByte(); alu.Execute(Alu.Cmd.ADD, true); Assert.AreEqual("01000001".BinToByte(), alu.Res); Assert.AreEqual(false, processor.S); Assert.AreEqual(false, processor.O); Assert.AreEqual(false, processor.Z); alu.X = "10000001".BinToByte(); alu.Y = "01111111".BinToByte(); alu.Execute(Alu.Cmd.ADD, true); Assert.AreEqual("00000000".BinToByte(), alu.Res); Assert.AreEqual(false, processor.S); Assert.AreEqual(false, processor.O); Assert.AreEqual(true, processor.Z); alu.X = "01111111".BinToByte(); alu.Y = "00000001".BinToByte(); alu.Execute(Alu.Cmd.ADD, true); Assert.AreEqual("10000000".BinToByte(), alu.Res); Assert.AreEqual(true, processor.S); Assert.AreEqual(true, processor.O); Assert.AreEqual(false, processor.Z); alu.X = "10000000".BinToByte(); alu.Y = "11111111".BinToByte(); alu.Execute(Alu.Cmd.ADD, true); Assert.AreEqual("01111111".BinToByte(), alu.Res); Assert.AreEqual(false, processor.S); Assert.AreEqual(true, processor.O); Assert.AreEqual(false, processor.Z); }