Esempio n. 1
0
    def decode(self, registers: Registers, *args, **kwargs) -> str:
        if self.rd_number == 0 and self.rs_number == 0:
            return NopInstruction()(self.word).decode(registers)
        rd_name = registers.get_register_name(self.rd_number)
        rt_name = registers.get_register_name(self.rt_number)

        return (f"{self.instruction_name} "
                f"{rd_name}, {rt_name}, {self.shamt_value}")
Esempio n. 2
0
    def decode(self, registers: Registers, coprocessor: COProcessor, *args,
               **kwargs) -> str:
        ft_name = coprocessor.registers.get_register_name(self.ft_number)
        rs_number = self.base
        rs_name = registers.get_register_name(rs_number)
        offset = self.offset

        return f"{self.instruction_name} {ft_name}, {offset}({rs_name})"
Esempio n. 3
0
    def execute(self, registers: Registers, program_counter, memory: Memory,
                *args, **kwargs):
        rs_register = registers.get_register(self.rs_number)
        new_pc = rs_register.to_unsigned_int()

        branch_delayed_word = memory.load(program_counter + 4)
        branch_delayed_instruction = kwargs['instruction_factory'].factory(
            branch_delayed_word)
        delayed_registers, delayed_pc, delayed_memory, coproc = branch_delayed_instruction.execute(
            registers=registers,
            program_counter=program_counter + 4,
            memory=memory,
            *args,
            **kwargs)

        return delayed_registers, new_pc, delayed_memory, kwargs[
            'coprocessor'].registers
Esempio n. 4
0
    def decode(self, registers: Registers, coprocessor: COProcessor, *args, **kwargs) -> str:
        fs_name = coprocessor.registers.get_register_name(self.fs_number)
        rt_name = registers.get_register_name(self.rt_number)

        return f"{self.instruction_name} {rt_name}, {fs_name}"
Esempio n. 5
0
    def decode(self, registers: Registers, *args, **kwargs) -> str:
        rs_name = registers.get_register_name(self.rs_number)
        rt_name = registers.get_register_name(self.rt_number)

        return f"{self.instruction_name} {rs_name}, {rt_name}"
Esempio n. 6
0
    def decode(self, registers: Registers, *args, **kwargs) -> str:
        rs_name = registers.get_register_name(self.rs_number)
        rt_name = registers.get_register_name(self.rt_number)
        immediate_value = self.imediate

        return f"{self.instruction_name} {rt_name}, {rs_name}, {immediate_value}"  # noqa: E501
Esempio n. 7
0
 def decode(self, registers: Registers, *args, **kwargs) -> str:
     rs_name = registers.get_register_name(self.rs_number)
     rt_name = registers.get_register_name(self.rt_number)
     immediate_value = (((1 << 16) - 1) & (self.word.data >> (0)))
     return f"{self.instruction_name} {rt_name}, {rs_name}, {immediate_value}"  # noqa: E501
Esempio n. 8
0
    def decode(self, registers: Registers, *args, **kwargs) -> str:
        rd_name = registers.get_register_name(self.rd_number)
        rt_name = registers.get_register_name(self.rt_number)

        return (f"{self.instruction_name} "
                f"{rd_name}, {rt_name}, {self.shamt_value}")
Esempio n. 9
0
 def test_get_all_valid_registers(self):
     registers = Registers()
     for x in range(32):
         register = registers.get_register(x)
         assert isinstance(register, Register)
Esempio n. 10
0
    def test_register_name(self):
        register_name = "$a0"
        register_number = 4
        registers = Registers()

        assert register_name == registers.get_register_name(register_number)
Esempio n. 11
0
 def test_modify_register_value(self):
     new_value = 42
     registers = Registers()
     #  register No 4 is register a0
     registers.set_register_value(4, new_value)
     assert new_value == registers.get_register_value(4)
Esempio n. 12
0
 def test_get_invalid_register(self):
     registers = Registers()
     with pytest.raises(InvalidRegister):
         registers.get_register(-1)
         registers.registers(100)
Esempio n. 13
0
 def test_all_registers_initialized_with_zero(self):
     registers = Registers()
     for x in range(32):
         register_value = registers.get_register_value(x)
         assert register_value == 0