Ejemplo n.º 1
0
        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));
        }
Ejemplo n.º 2
0
        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));
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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);
        }