public void TestSlli() { this.virtualMachine.SetRegisterValue(Registers.R8, 2); RFormatInstruction slliInstruction = new RFormatInstruction( OperationCodes.Slli.Code(), OperationXCodes.Slli | 2, Registers.R8.Number(), 0, Registers.R9.Number()); this.virtualMachine.ExecuteInstruction(slliInstruction.Encode()); Assert.AreEqual(8, this.virtualMachine.GetRegisterValue(Registers.R9)); }
public void TestSub() { this.virtualMachine.SetRegisterValue(Registers.R8, 2); this.virtualMachine.SetRegisterValue(Registers.R9, 8); RFormatInstruction slliInstruction = new RFormatInstruction( OperationCodes.Sub.Code(), OperationXCodes.Sub, Registers.R8.Number(), Registers.R9.Number(), Registers.R10.Number()); this.virtualMachine.ExecuteInstruction(slliInstruction.Encode()); Assert.AreEqual(-6, this.virtualMachine.GetRegisterValue(Registers.R10)); }
public void TestRFormat() { RFormatInstruction test = new RFormatInstruction(25, 2047, 12, 15, 17); RFormatInstruction decodedTest = RFormatInstruction.Decode(test.Encode()); Assert.AreEqual(test.OpCode, decodedTest.OpCode); Assert.AreEqual(test.OpxCode, decodedTest.OpxCode); Assert.AreEqual(test.RegisterA, decodedTest.RegisterA); Assert.AreEqual(test.RegisterB, decodedTest.RegisterB); Assert.AreEqual(test.RegisterC, decodedTest.RegisterC); Assert.AreEqual(25, decodedTest.OpCode); Assert.AreEqual(2047, decodedTest.OpxCode); Assert.AreEqual(12, decodedTest.RegisterA); Assert.AreEqual(15, decodedTest.RegisterB); Assert.AreEqual(17, decodedTest.RegisterC); }
public void TestInstructions() { //Test the I-format this.virtualMachine.SetRegisterValue(Registers.R8, 17); IFormatInstruction addiInst = new IFormatInstruction( OperationCodes.Addi.Code(), Registers.R8.Number(), Registers.R9.Number(), 278); this.virtualMachine.ExecuteInstruction(addiInst.Encode()); Assert.AreEqual(278 + 17, this.virtualMachine.GetRegisterValue(Registers.R9)); this.virtualMachine.SetRegisterValue(Registers.R8, 17); addiInst = new IFormatInstruction( OperationCodes.Addi.Code(), Registers.R8.Number(), Registers.R9.Number(), -234); this.virtualMachine.ExecuteInstruction(addiInst.Encode()); Assert.AreEqual(-234 + 17, this.virtualMachine.GetRegisterValue(Registers.R9)); //Test the R-format this.virtualMachine.SetRegisterValue(Registers.R8, 17); this.virtualMachine.SetRegisterValue(Registers.R9, 4717); RFormatInstruction addInst = new RFormatInstruction( OperationCodes.Add.Code(), OperationXCodes.Add, Registers.R8.Number(), Registers.R9.Number(), Registers.R10.Number()); this.virtualMachine.ExecuteInstruction(addInst.Encode()); Assert.AreEqual(4717 + 17, this.virtualMachine.GetRegisterValue(Registers.R10)); //Tests memory instructions this.virtualMachine.SetRegisterValue(Registers.R8, 1024); this.virtualMachine.SetRegisterValue(Registers.R9, 4711); IFormatInstruction storeInst = new IFormatInstruction( OperationCodes.Stw.Code(), Registers.R8.Number(), Registers.R9.Number(), 0); this.virtualMachine.ExecuteInstruction(storeInst.Encode()); int value = this.virtualMachine.ReadWordFromMemory(1024); Assert.AreEqual(4711, value); IFormatInstruction loadInst = new IFormatInstruction( OperationCodes.Ldw.Code(), Registers.R8.Number(), Registers.R10.Number(), 0); this.virtualMachine.ExecuteInstruction(loadInst.Encode()); Assert.AreEqual(4711, this.virtualMachine.GetRegisterValue(Registers.R10)); //Tests branch instructions IFormatInstruction branchInst = new IFormatInstruction( OperationCodes.Br.Code(), 0, 0, 4 * 4); this.virtualMachine.ExecuteInstruction(branchInst.Encode()); Assert.AreEqual((uint)(4 * 4), this.virtualMachine.ProgramCounter); }