def test_skne_should_skip_if_not_equals(self): machine = Machine() machine.PC = 10 machine.VRegisters[2] = 0xBC skne = Skne() skne.arg_constant = 0xEE skne.arg_registers.append(2) skne.execute(machine) self.assertTrue(isinstance(skne, JumpInstruction)) self.assertEqual(machine.PC, 14)
def test_jsr_should_call_subroutine(self): machine = Machine() machine.PC = 10 jsr = Jsr() jsr.arg_constant = 0xEEF jsr.execute(machine) self.assertTrue(isinstance(jsr, JumpInstruction)) self.assertEqual(machine.PC, 0xEEF) self.assertEqual(machine.Stack.top(), 12)
def test_skeq_registers_should_not_skip_if_not_equals(self): machine = Machine() machine.PC = 10 machine.VRegisters[2] = 0xEE machine.VRegisters[5] = 0xE4 skeq = SkeqRegister() skeq.arg_registers.append(2) skeq.arg_registers.append(5) skeq.execute(machine) self.assertTrue(isinstance(skeq, JumpInstruction)) self.assertEqual(machine.PC, 12)
def test_skne_registers_shouldnt_skip_if_equal(self): machine = Machine() machine.PC = 10 machine.VRegisters[1] = 5 machine.VRegisters[2] = 5 skne = SkneRegisters() skne.arg_registers.append(1) skne.arg_registers.append(2) skne.execute(machine) self.assertTrue(isinstance(skne, JumpInstruction)) self.assertEqual(machine.PC, 12)
def execute(self, machine: Machine): machine.Stack.push(machine.PC + 2) machine.PC = self.arg_constant
def execute(self, machine: Machine): machine.PC = self.arg_constant
def execute(self, machine: Machine): machine.PC = machine.VRegisters[0] + self.arg_constant
def execute(self, machine: Machine): machine.PC = machine.Stack.pop()