def test_jge(self):
     """
     Jump iff sign flag is 0.
     """
     for i in range(NUM_TESTS):
         intel_machine.re_init()
         label_addr = random.randint(FIRST_INST_ADDRESS, MAX_INSTRUCTIONS)
         intel_machine.labels["test_label"] = label_addr
         sign_flag = random.getrandbits(1)
         intel_machine.flags["SF"] = sign_flag
         assemble("jge test_label", intel_machine)
         if (not sign_flag):
             self.assertEqual(intel_machine.get_ip(), label_addr)
         else:
             self.assertEqual(intel_machine.get_ip(), 1)
Exemple #2
0
 def test_je(self):
     """
     Jump iff zero flag is 1.
     """
     for i in range(NUM_TESTS):
         intel_machine.re_init()
         label_addr = random.randint(FIRST_INST_ADDRESS, MAX_INSTRUCTIONS)
         intel_machine.labels["test_label"] = label_addr
         zero_flag = random.getrandbits(1)
         intel_machine.flags["ZF"] = zero_flag
         assemble("je test_label", 'intel', intel_machine)
         if (zero_flag):
             self.assertEqual(intel_machine.get_ip(), label_addr)
         else:
             self.assertEqual(intel_machine.get_ip(), 1)
Exemple #3
0
    def test_call(self):
        """
        Tests call.

        At the time of writing this test
        blank lines are skipped by the tokenizer.
        In order to have emu jump to the location of label_addr,
        we have to make no-op lines to assign the correct locations
        to the lines we test.
        """
        for i in range(NUM_TESTS):
            intel_machine.re_init()
            intel_machine.base = "dec"
            call_instr_addr = random.randint(FIRST_INST_ADDRESS,
                                             MAX_INSTRUCTIONS)
            label_addr = random.randint(FIRST_INST_ADDRESS, MAX_INSTRUCTIONS)

            code_to_run = [NO_OP] * (MAX_INSTRUCTIONS + 1)
            code_to_run[call_instr_addr] = "call " + TEST_LABEL + "\n"
            prev_label_info = code_to_run[label_addr]
            code_to_run[label_addr] = TEST_LABEL + ": " + prev_label_info

            intel_machine.labels[TEST_LABEL] = label_addr
            intel_machine.set_ip(call_instr_addr)

            # We step once through the code, executing only `call`.
            assemble("".join(code_to_run), 'att', intel_machine, step=True)

            self.assertEqual(intel_machine.get_ip(), label_addr)
Exemple #4
0
 def test_jg(self):
     """
     Jump iff both sign flag and zero flag are 0.
     """
     for i in range(NUM_TESTS):
         intel_machine.re_init()
         label_addr = random.randint(FIRST_INST_ADDRESS, MAX_INSTRUCTIONS)
         intel_machine.labels["test_label"] = label_addr
         sign_flag = random.getrandbits(1)
         zero_flag = random.getrandbits(1)
         intel_machine.flags["SF"] = sign_flag
         intel_machine.flags["ZF"] = zero_flag
         assemble("jg test_label", 'att', intel_machine)
         if ((not zero_flag) and (not sign_flag)):
             self.assertEqual(intel_machine.get_ip(), label_addr)
         else:
             self.assertEqual(intel_machine.get_ip(), 1)
Exemple #5
0
 def test_jle(self):
     """
     Jump iff either sign flag or zero flag are 1.
     """
     for i in range(NUM_TESTS):
         intel_machine.re_init()
         intel_machine.base = "dec"
         label_addr = random.randint(FIRST_INST_ADDRESS, MAX_INSTRUCTIONS)
         intel_machine.labels["test_label"] = label_addr
         sign_flag = random.getrandbits(1)
         zero_flag = random.getrandbits(1)
         intel_machine.flags["SF"] = sign_flag
         intel_machine.flags["ZF"] = zero_flag
         assemble("jle test_label", 'att', intel_machine)
         if (zero_flag or sign_flag):
             self.assertEqual(intel_machine.get_ip(), label_addr)
         else:
             self.assertEqual(intel_machine.get_ip(), 1)
 def test_jmp(self):
     """
     Jump to a random location from 1 to MAX_INSTRUCTIONS.
     Assert IP is set to that location by jump.
     """
     for i in range(NUM_TESTS):
         intel_machine.re_init()
         label_addr = random.randint(FIRST_INST_ADDRESS, MAX_INSTRUCTIONS)
         intel_machine.labels["test_label"] = label_addr
         assemble("jmp test_label", intel_machine)
         self.assertEqual(intel_machine.get_ip(), label_addr)