コード例 #1
0
ファイル: inst.py プロジェクト: cpuex2015-group4/Carina
    def addi(operands, label_dict, line_num):
        """
		Operation : %rt <- %rs + $imm
		Format    : [ 001000 | %rs | %rt |    $imm    ]
		"""
        imm_pattern = re.compile(r"\$-?\d+")
        match = imm_pattern.match(operands[2])
        if match is not None:
            imm_bin = Parser.parse_operand(operands[2], Operandtype.IMMEDIATE)[1]
        else:
            # operand may be label
            imm_bin = utils.imm2bin(label_dict[operands[2]])

        assert len(imm_bin) <= 16, "too large integer operand"

        inst_bin = (
            "001000"
            + Parser.parse_operand(operands[1], Operandtype.REGISTER_DIRECT)[0]
            + Parser.parse_operand(operands[0], Operandtype.REGISTER_DIRECT)[0]
            + imm_bin
        )
        return utils.bin2bytes(inst_bin)