def avr_ld(obj,s,d,k): dst = env.R[d] adr = env.cst(k,16) adr.sf = False obj.operands = [dst,adr] if s==0 else [adr,dst] obj.misc['mem'] = s+1 obj.type = type_data_processing
def avr_ld(obj,s,kh,ks,d,k): dst = env.R[16+d] adr = k//kh//ks//~ks adr = env.cst(adr.int(),16) obj.operands = [dst,adr] if s==0 else [adr,dst] obj.misc['mem'] = s+1 obj.type = type_data_processing
def avr_default(obj,K,d,k): dst = env.R[16+d] imm = env.cst(k+(K<<4),8) if obj.mnemonic in ('ANDI','ORI'): imm.sf = False obj.operands = [dst,imm] obj.type = type_data_processing
def avr_default(obj, K, d, k): dst = (env.R[24], env.X, env.Y, env.Z)[d] if d == 0: obj.misc["W"] = (dst, ) imm = env.cst(k + (K << 4), 16) obj.operands = [dst, imm] obj.type = type_data_processing
def avr_io(obj,A,r,a): port = env.cst(a+(A<<4),8) port.sf = False obj.operands = [port,env.R[r]] obj.type = type_other
def avr_io(obj,A,d,a): port = env.cst(a+(A<<4),8) port.sf = False obj.operands = [env.R[d],port] obj.type = type_other
def avr_io(obj,a,b): port = env.cst(a,5) port.sf = False obj.operands = [env.cst(a,5),env.cst(b,3)] obj.type = type_data_processing
def avr_call(obj,khi,k16,klo): adr = env.cst( (klo//k16//khi).int(), 22) adr.sf = False obj.operands = [adr] obj.type = type_control_flow
def avr_br(obj,k): off = env.cst(k.int(-1),16) obj.operands = [off] obj.type = type_control_flow
def avr_brc(obj,k,s,_cc): bit = env.SREG[s:s+1] off = env.cst(k.int(-1),16) obj.operands = [bit,off] obj.cond = (bit==_cc) obj.type = type_control_flow
def avr_ld(obj,q,q2,s,d,q3): dst = env.R[d] off = env.cst((q<<5)+(q2<<3)+q3,16) obj.operands = [dst,env.Z+off] if s==0 else [env.Z+off, dst] obj.misc['mem'] = True obj.type = type_data_processing
def avr_ld(obj,q,qh,s,d,ql): dst = env.R[d] off = env.cst((q<<5)+(qh<<3)+ql,16) obj.operands = [dst,env.Y+off] if s==0 else [env.Y+off, dst] obj.misc['mem'] = s+1 obj.type = type_data_processing