示例#1
0
    def test_exiting_on_halt(self):
        load_into_memory(self.cpu.memory, ["nop", "nop", "swi #0", "nop"])

        self.cpu.execute_until_halted()

        self.assertEqual(self.cpu.instructions_executed, 3)
        self.assertEqual(self.cpu.register_bank.get("pc"), 3)
示例#2
0
    def test_bl(self):
        load_into_memory(self.proc.memory, ["bl foobar", "nop", "foobar nop"])

        self.proc.step()

        self.assertEqual(self.proc.register_bank.get("lr"), 1)
        self.assertEqual(self.proc.register_bank.get("pc"), 2)
    def test_bl(self):
        load_into_memory(self.proc.memory, ["bl foobar", "nop", "foobar nop"])

        self.proc.step()

        self.assertEqual(self.proc.register_bank.get("lr"), 1)
        self.assertEqual(self.proc.register_bank.get("pc"), 2)
示例#4
0
    def test_exiting_on_halt(self):
        load_into_memory(self.cpu.memory, ["nop", "nop", "swi #0", "nop"])

        self.cpu.execute_until_halted()

        self.assertEqual(self.cpu.instructions_executed, 3)
        self.assertEqual(self.cpu.register_bank.get("pc"), 3)
示例#5
0
    def test_beq_not_performed(self):
        load_into_memory(self.proc.memory, ["mov r0, #5", "cmp r0, #6", "beq foobar", "nop", "foobar nop"])

        self.proc.step()
        self.proc.step()
        self.proc.step() # beq

        self.assertEqual(self.proc.register_bank.get("pc"), 3)
示例#6
0
    def test_push(self):
        load_into_memory(self.proc.memory, ["mov r0, #5", "push r0"])

        self.proc.step()
        self.proc.step()

        sp = self.proc.register_bank.get("sp")

        self.assertEqual(self.proc.memory.get(sp), 5)
    def test_push(self):
        load_into_memory(self.proc.memory, ["mov r0, #5", "push r0"])

        self.proc.step()
        self.proc.step()

        sp = self.proc.register_bank.get("sp")

        self.assertEqual(self.proc.memory.get(sp), 5)
    def test_beq_not_performed(self):
        load_into_memory(
            self.proc.memory,
            ["mov r0, #5", "cmp r0, #6", "beq foobar", "nop", "foobar nop"])

        self.proc.step()
        self.proc.step()
        self.proc.step()  # beq

        self.assertEqual(self.proc.register_bank.get("pc"), 3)
示例#9
0
    def test_pop(self):
        load_into_memory(self.proc.memory, ["mov r0, #5", "mov r1, #9", "push r0", "push r1", "pop r2", "pop r3"])

        self.proc.step()
        self.proc.step()
        self.proc.step()
        self.proc.step()
        self.proc.step()
        self.proc.step()

        self.assertEqual(self.proc.register_bank.get("r2"), 9)
        self.assertEqual(self.proc.register_bank.get("r3"), 5)
示例#10
0
    def test_pop(self):
        load_into_memory(self.proc.memory, [
            "mov r0, #5", "mov r1, #9", "push r0", "push r1", "pop r2",
            "pop r3"
        ])

        self.proc.step()
        self.proc.step()
        self.proc.step()
        self.proc.step()
        self.proc.step()
        self.proc.step()

        self.assertEqual(self.proc.register_bank.get("r2"), 9)
        self.assertEqual(self.proc.register_bank.get("r3"), 5)
示例#11
0
    def test_fetch_valid_instruction(self):
        load_into_memory(self.cpu.memory, ["mov r0, #1", "mov r1, #5"])

        inst_1 = self.cpu.fetch_instruction()

        self.assertEqual(self.cpu.register_bank.get("pc"), 1)
        self.assertEqual(self.cpu.instructions_executed, 0)

        self.assertEqual(inst_1.mnemonic, "mov")
        self.assertEqual(inst_1.operands[0].value, "r0")
        self.assertEqual(inst_1.operands[1].value, 1)

        inst_2 = self.cpu.fetch_instruction()

        self.assertEqual(self.cpu.register_bank.get("pc"), 2)
        self.assertEqual(inst_2.mnemonic, "mov")
        self.assertEqual(inst_2.operands[0].value, "r1")
        self.assertEqual(inst_2.operands[1].value, 5)
示例#12
0
    def test_load_into_memory(self):
        source_code = ["mov r0, #1", "mov r1, #5"]
        test_memory = Memory()

        load_into_memory(test_memory, source_code)

        self.assertEqual(test_memory.get(2), 0)

        inst_1 = test_memory.get(0)
        inst_2 = test_memory.get(1)

        self.assertEqual(inst_1.mnemonic, "mov")
        self.assertEqual(inst_1.operands[0].value, "r0")
        self.assertEqual(inst_1.operands[1].value, 1)

        self.assertEqual(inst_2.mnemonic, "mov")
        self.assertEqual(inst_2.operands[0].value, "r1")
        self.assertEqual(inst_2.operands[1].value, 5)
示例#13
0
    def test_load_into_memory(self):
        source_code = ["mov r0, #1", "mov r1, #5"]
        test_memory = Memory()

        load_into_memory(test_memory, source_code)

        self.assertEqual(test_memory.get(2), 0)

        inst_1 = test_memory.get(0)
        inst_2 = test_memory.get(1)

        self.assertEqual(inst_1.mnemonic, "mov")
        self.assertEqual(inst_1.operands[0].value, "r0")
        self.assertEqual(inst_1.operands[1].value, 1)

        self.assertEqual(inst_2.mnemonic, "mov")
        self.assertEqual(inst_2.operands[0].value, "r1")
        self.assertEqual(inst_2.operands[1].value, 5)
示例#14
0
    def test_fetch_valid_instruction(self):
        load_into_memory(self.cpu.memory, ["mov r0, #1", "mov r1, #5"])

        inst_1 = self.cpu.fetch_instruction()

        self.assertEqual(self.cpu.register_bank.get("pc"), 1)
        self.assertEqual(self.cpu.instructions_executed, 0)

        self.assertEqual(inst_1.mnemonic, "mov")
        self.assertEqual(inst_1.operands[0].value, "r0")
        self.assertEqual(inst_1.operands[1].value, 1)

        inst_2 = self.cpu.fetch_instruction()

        self.assertEqual(self.cpu.register_bank.get("pc"), 2)
        self.assertEqual(inst_2.mnemonic, "mov")
        self.assertEqual(inst_2.operands[0].value, "r1")
        self.assertEqual(inst_2.operands[1].value, 5)