コード例 #1
0
ファイル: branch.py プロジェクト: iamedu/armdev
    def execute(self, proc, inst):
        if not utils.checkCondition(proc, inst):
            return

        l = utils.getBits(inst, 24)
        signed_immed_24 = utils.getBits(inst, 0, 24)

        if l == 1:
            proc.lr = proc.pc

        branch_addr = utils.signExtend(signed_immed_24, 24, 30)
        branch_addr = branch_addr << 2
        branch_addr = utils.signValue(branch_addr)
        proc.pc += 4 + branch_addr
コード例 #2
0
ファイル: ldstr.py プロジェクト: iamedu/armdev
    def execute(self, proc, inst):
        if not utils.checkCondition(proc, inst):
            return

        modes =  component.getAllUtilitiesRegisteredFor(IARMLSAddressingMode)
        for mode in modes:
            if utils.testInstruction(mode, inst):
                address = mode.getVal(proc, inst)
                break
        rd = utils.getBits(inst, 12, 4)
        rd = 'r' + str(rd)

        data = proc.readAddr(address, 2)
        data = utils.signExtend(data, 16, 32)

        setattr(proc, rd, data)