예제 #1
0
    def bytes(self):
        ''' Returns opcodes
        '''
        if self.asm not in ('DEFB', 'DEFS', 'DEFW'):
            if self.pending:
                tmp = self.arg    # Saves current arg temporarily
                self.arg = tuple([0] * self.arg_num)
                result = AsmInstruction.bytes(self)
                self.arg = tmp    # And recovers it

                return result

            return AsmInstruction.bytes(self)

        if self.asm == 'DEFB':
            if self.pending:
                return tuple([0] * self.arg_num)

            return tuple([x & 0xFF for x in self.argval()])

        if self.asm == 'DEFS':
            if self.pending:
                N = self.arg[0]
                if isinstance(N, Expr):
                    N = N.eval()
                return tuple([0] * N) # ??

            args = self.argval()
            num = args[1] & 0xFF
            return tuple([num] * args[0])

        if self.pending: # DEFW
            return tuple([0] * 2 * self.arg_num)

        result = ()

        for i in self.argval():
            x = i & 0xFFFF
            result += (x & 0xFF, x >> 8)

        return result