ducky.cpu.instructions module

class ducky.cpu.instructions.ADD(instruction_set)[source]

Bases: ducky.cpu.instructions._BINOP

static jit(core, inst)[source]
mnemonic = 'add'
opcode = <DuckyOpcodes.ADD: 28>
class ducky.cpu.instructions.AND(instruction_set)[source]

Bases: ducky.cpu.instructions._BITOP

static jit(core, inst)[source]
mnemonic = 'and'
opcode = <DuckyOpcodes.AND: 34>
class ducky.cpu.instructions.BE(instruction_set)[source]

Bases: ducky.cpu.instructions._BRANCH

mnemonic = 'be'
class ducky.cpu.instructions.BG(instruction_set)[source]

Bases: ducky.cpu.instructions._BRANCH

mnemonic = 'bg'
class ducky.cpu.instructions.BGE(instruction_set)[source]

Bases: ducky.cpu.instructions._BRANCH

mnemonic = 'bge'
class ducky.cpu.instructions.BL(instruction_set)[source]

Bases: ducky.cpu.instructions._BRANCH

mnemonic = 'bl'
class ducky.cpu.instructions.BLE(instruction_set)[source]

Bases: ducky.cpu.instructions._BRANCH

mnemonic = 'ble'
class ducky.cpu.instructions.BNE(instruction_set)[source]

Bases: ducky.cpu.instructions._BRANCH

mnemonic = 'bne'
class ducky.cpu.instructions.BNO(instruction_set)[source]

Bases: ducky.cpu.instructions._BRANCH

mnemonic = 'bno'
class ducky.cpu.instructions.BNS(instruction_set)[source]

Bases: ducky.cpu.instructions._BRANCH

mnemonic = 'bns'
class ducky.cpu.instructions.BNZ(instruction_set)[source]

Bases: ducky.cpu.instructions._BRANCH

mnemonic = 'bnz'
class ducky.cpu.instructions.BO(instruction_set)[source]

Bases: ducky.cpu.instructions._BRANCH

mnemonic = 'bo'
class ducky.cpu.instructions.BS(instruction_set)[source]

Bases: ducky.cpu.instructions._BRANCH

mnemonic = 'bs'
class ducky.cpu.instructions.BZ(instruction_set)[source]

Bases: ducky.cpu.instructions._BRANCH

mnemonic = 'bz'
class ducky.cpu.instructions.CALL(instruction_set)[source]

Bases: ducky.cpu.instructions._JUMP

static execute(core, inst)[source]
static jit(core, inst)[source]
mnemonic = 'call'
opcode = <DuckyOpcodes.CALL: 15>
class ducky.cpu.instructions.CAS(instruction_set)[source]

Bases: ducky.cpu.instructions.Descriptor

static assemble_operands(logger, buffer, inst, operands)[source]
static disassemble_operands(logger, inst)[source]
encoding

alias of EncodingA

static execute(core, inst)[source]
mnemonic = 'cas'
opcode = <DuckyOpcodes.CAS: 7>
operands = 'r,r,r'
class ducky.cpu.instructions.CLI(instruction_set)[source]

Bases: ducky.cpu.instructions.Descriptor

encoding

alias of EncodingI

static execute(core, inst)[source]
mnemonic = 'cli'
opcode = <DuckyOpcodes.CLI: 17>
class ducky.cpu.instructions.CMP(instruction_set)[source]

Bases: ducky.cpu.instructions._CMP

static execute(core, inst)[source]
static jit(core, inst)[source]
mnemonic = 'cmp'
opcode = <DuckyOpcodes.CMP: 47>
class ducky.cpu.instructions.CMPU(instruction_set)[source]

Bases: ducky.cpu.instructions._CMP

static execute(core, inst)[source]
mnemonic = 'cmpu'
opcode = <DuckyOpcodes.CMPU: 48>
class ducky.cpu.instructions.CTR(instruction_set)[source]

Bases: ducky.cpu.instructions.Descriptor_R_R

encoding

alias of EncodingR

static execute(core, inst)[source]
mnemonic = 'ctr'
opcode = <DuckyOpcodes.CTR: 60>
class ducky.cpu.instructions.CTW(instruction_set)[source]

Bases: ducky.cpu.instructions.Descriptor_R_R

encoding

alias of EncodingR

static execute(core, inst)[source]
mnemonic = 'ctw'
opcode = <DuckyOpcodes.CTW: 61>
class ducky.cpu.instructions.DEC(instruction_set)[source]

Bases: ducky.cpu.instructions.Descriptor_R

static execute(core, inst)[source]
static jit(core, inst)[source]
mnemonic = 'dec'
opcode = <DuckyOpcodes.DEC: 27>
class ducky.cpu.instructions.DIV(instruction_set)[source]

Bases: ducky.cpu.instructions._BINOP

mnemonic = 'div'
opcode = <DuckyOpcodes.DIV: 31>
class ducky.cpu.instructions.Descriptor(instruction_set)[source]

Bases: object

static assemble_operands(logger, buffer, inst, operands)[source]
classmethod disassemble_mnemonic(inst)[source]
static disassemble_operands(logger, inst)[source]
emit_instruction(logger, buffer, line)[source]
encoding

alias of EncodingR

static execute(core, inst)[source]
static fill_reloc_slot(logger, inst, slot)[source]
inst_aligned = False
static jit(core, inst)[source]
mnemonic = None
opcode = None
operands = None
pattern = None
relative_address = False
class ducky.cpu.instructions.Descriptor_I(instruction_set)[source]

Bases: ducky.cpu.instructions.Descriptor

static assemble_operands(logger, buffer, inst, operands)[source]
static disassemble_operands(logger, inst)[source]
operands = 'i'
class ducky.cpu.instructions.Descriptor_R(instruction_set)[source]

Bases: ducky.cpu.instructions.Descriptor

static assemble_operands(logger, buffer, inst, operands)[source]
static disassemble_operands(logger, inst)[source]
encoding

alias of EncodingR

operands = 'r'
class ducky.cpu.instructions.Descriptor_RI(instruction_set)[source]

Bases: ducky.cpu.instructions.Descriptor

static assemble_operands(logger, buffer, inst, operands)[source]
static disassemble_operands(logger, inst)[source]
encoding

alias of EncodingI

operands = 'ri'
class ducky.cpu.instructions.Descriptor_RI_R(instruction_set)[source]

Bases: ducky.cpu.instructions.Descriptor

static assemble_operands(logger, buffer, inst, operands)[source]
static disassemble_operands(logger, inst)[source]
encoding

alias of EncodingR

operands = 'ri,r'
class ducky.cpu.instructions.Descriptor_R_I(instruction_set)[source]

Bases: ducky.cpu.instructions.Descriptor

static assemble_operands(logger, buffer, inst, operands)[source]
static disassemble_operands(logger, inst)[source]
encoding

alias of EncodingI

operands = 'r,i'
class ducky.cpu.instructions.Descriptor_R_R(instruction_set)[source]

Bases: ducky.cpu.instructions.Descriptor

static assemble_operands(logger, buffer, inst, operands)[source]
static disassemble_operands(logger, inst)[source]
encoding

alias of EncodingR

operands = 'r,r'
class ducky.cpu.instructions.Descriptor_R_RI(instruction_set)[source]

Bases: ducky.cpu.instructions.Descriptor

static assemble_operands(logger, buffer, inst, operands)[source]
static disassemble_operands(logger, inst)[source]
encoding

alias of EncodingR

operands = 'r,ri'
class ducky.cpu.instructions.DuckyInstructionSet[source]

Bases: ducky.cpu.instructions.InstructionSet

instruction_set_id = 0
instructions = [<ducky.cpu.instructions.NOP object at 0x7f16cbe01e50>, <ducky.cpu.instructions.INT object at 0x7f16cbe01f50>, <ducky.cpu.instructions.IPI object at 0x7f16cbe01f90>, <ducky.cpu.instructions.RETINT object at 0x7f16cbe01fd0>, <ducky.cpu.instructions.CALL object at 0x7f16cbd95090>, <ducky.cpu.instructions.RET object at 0x7f16cbd950d0>, <ducky.cpu.instructions.CLI object at 0x7f16cbd95150>, <ducky.cpu.instructions.STI object at 0x7f16cbd951d0>, <ducky.cpu.instructions.HLT object at 0x7f16cbd95250>, <ducky.cpu.instructions.RST object at 0x7f16cbd95290>, <ducky.cpu.instructions.IDLE object at 0x7f16cbd95310>, <ducky.cpu.instructions.PUSH object at 0x7f16cbd95390>, <ducky.cpu.instructions.POP object at 0x7f16cbd953d0>, <ducky.cpu.instructions.INC object at 0x7f16cbd95410>, <ducky.cpu.instructions.DEC object at 0x7f16cbd95450>, <ducky.cpu.instructions.ADD object at 0x7f16cbd95490>, <ducky.cpu.instructions.SUB object at 0x7f16cbd954d0>, <ducky.cpu.instructions.CMP object at 0x7f16cbd95510>, <ducky.cpu.instructions.J object at 0x7f16cbd95550>, <ducky.cpu.instructions.INW object at 0x7f16cbd95590>, <ducky.cpu.instructions.INB object at 0x7f16cbd955d0>, <ducky.cpu.instructions.INS object at 0x7f16cbd95610>, <ducky.cpu.instructions.OUTS object at 0x7f16cbd95650>, <ducky.cpu.instructions.OUTW object at 0x7f16cbd95690>, <ducky.cpu.instructions.OUTB object at 0x7f16cbd956d0>, <ducky.cpu.instructions.AND object at 0x7f16cbd95710>, <ducky.cpu.instructions.OR object at 0x7f16cbd95750>, <ducky.cpu.instructions.XOR object at 0x7f16cbd95790>, <ducky.cpu.instructions.NOT object at 0x7f16cbd957d0>, <ducky.cpu.instructions.SHIFTL object at 0x7f16cbd95810>, <ducky.cpu.instructions.SHIFTR object at 0x7f16cbd95850>, <ducky.cpu.instructions.LW object at 0x7f16cbd95890>, <ducky.cpu.instructions.LS object at 0x7f16cbd958d0>, <ducky.cpu.instructions.LB object at 0x7f16cbd95910>, <ducky.cpu.instructions.LI object at 0x7f16cbd95950>, <ducky.cpu.instructions.LIU object at 0x7f16cbd95990>, <ducky.cpu.instructions.LA object at 0x7f16cbd959d0>, <ducky.cpu.instructions.STW object at 0x7f16cbd95a10>, <ducky.cpu.instructions.STS object at 0x7f16cbd95a50>, <ducky.cpu.instructions.STB object at 0x7f16cbd95a90>, <ducky.cpu.instructions.MOV object at 0x7f16cbd95ad0>, <ducky.cpu.instructions.SWP object at 0x7f16cbd95b10>, <ducky.cpu.instructions.MUL object at 0x7f16cbd95b50>, <ducky.cpu.instructions.DIV object at 0x7f16cbd95b90>, <ducky.cpu.instructions.UDIV object at 0x7f16cbd95bd0>, <ducky.cpu.instructions.MOD object at 0x7f16cbd95c10>, <ducky.cpu.instructions.CMPU object at 0x7f16cbd95c50>, <ducky.cpu.instructions.CAS object at 0x7f16cbd95c90>, <ducky.cpu.instructions.SIS object at 0x7f16cbd95cd0>, <ducky.cpu.instructions.BE object at 0x7f16cbd95d10>, <ducky.cpu.instructions.BNE object at 0x7f16cbd95d50>, <ducky.cpu.instructions.BZ object at 0x7f16cbd95d90>, <ducky.cpu.instructions.BNZ object at 0x7f16cbd95dd0>, <ducky.cpu.instructions.BO object at 0x7f16cbd95e10>, <ducky.cpu.instructions.BNO object at 0x7f16cbd95e50>, <ducky.cpu.instructions.BS object at 0x7f16cbd95e90>, <ducky.cpu.instructions.BNS object at 0x7f16cbd95ed0>, <ducky.cpu.instructions.BG object at 0x7f16cbd95f10>, <ducky.cpu.instructions.BGE object at 0x7f16cbd95f50>, <ducky.cpu.instructions.BL object at 0x7f16cbd95f90>, <ducky.cpu.instructions.BLE object at 0x7f16cbd95fd0>, <ducky.cpu.instructions.SETE object at 0x7f16cbda7050>, <ducky.cpu.instructions.SETNE object at 0x7f16cbda7090>, <ducky.cpu.instructions.SETZ object at 0x7f16cbda70d0>, <ducky.cpu.instructions.SETNZ object at 0x7f16cbda7110>, <ducky.cpu.instructions.SETO object at 0x7f16cbda7150>, <ducky.cpu.instructions.SETNO object at 0x7f16cbda7190>, <ducky.cpu.instructions.SETS object at 0x7f16cbda71d0>, <ducky.cpu.instructions.SETNS object at 0x7f16cbda7210>, <ducky.cpu.instructions.SETG object at 0x7f16cbda7250>, <ducky.cpu.instructions.SETGE object at 0x7f16cbda7290>, <ducky.cpu.instructions.SETL object at 0x7f16cbda72d0>, <ducky.cpu.instructions.SETLE object at 0x7f16cbda7310>, <ducky.cpu.instructions.LPM object at 0x7f16cbda7350>, <ducky.cpu.instructions.CTR object at 0x7f16cbda73d0>, <ducky.cpu.instructions.CTW object at 0x7f16cbda7410>, <ducky.cpu.instructions.FPTC object at 0x7f16cbda7450>]
opcode_desc_map = {<DuckyOpcodes.NOP: 0>: <ducky.cpu.instructions.NOP object at 0x7f16cbe01e50>, <DuckyOpcodes.LW: 1>: <ducky.cpu.instructions.LW object at 0x7f16cbd95890>, <DuckyOpcodes.LS: 2>: <ducky.cpu.instructions.LS object at 0x7f16cbd958d0>, <DuckyOpcodes.LB: 3>: <ducky.cpu.instructions.LB object at 0x7f16cbd95910>, <DuckyOpcodes.STW: 4>: <ducky.cpu.instructions.STW object at 0x7f16cbd95a10>, <DuckyOpcodes.STS: 5>: <ducky.cpu.instructions.STS object at 0x7f16cbd95a50>, <DuckyOpcodes.STB: 6>: <ducky.cpu.instructions.STB object at 0x7f16cbd95a90>, <DuckyOpcodes.CAS: 7>: <ducky.cpu.instructions.CAS object at 0x7f16cbd95c90>, <DuckyOpcodes.LA: 8>: <ducky.cpu.instructions.LA object at 0x7f16cbd959d0>, <DuckyOpcodes.LI: 9>: <ducky.cpu.instructions.LI object at 0x7f16cbd95950>, <DuckyOpcodes.LIU: 10>: <ducky.cpu.instructions.LIU object at 0x7f16cbd95990>, <DuckyOpcodes.MOV: 11>: <ducky.cpu.instructions.MOV object at 0x7f16cbd95ad0>, <DuckyOpcodes.SWP: 12>: <ducky.cpu.instructions.SWP object at 0x7f16cbd95b10>, <DuckyOpcodes.INT: 13>: <ducky.cpu.instructions.INT object at 0x7f16cbe01f50>, <DuckyOpcodes.RETINT: 14>: <ducky.cpu.instructions.RETINT object at 0x7f16cbe01fd0>, <DuckyOpcodes.CALL: 15>: <ducky.cpu.instructions.CALL object at 0x7f16cbd95090>, <DuckyOpcodes.RET: 16>: <ducky.cpu.instructions.RET object at 0x7f16cbd950d0>, <DuckyOpcodes.CLI: 17>: <ducky.cpu.instructions.CLI object at 0x7f16cbd95150>, <DuckyOpcodes.STI: 18>: <ducky.cpu.instructions.STI object at 0x7f16cbd951d0>, <DuckyOpcodes.RST: 19>: <ducky.cpu.instructions.RST object at 0x7f16cbd95290>, <DuckyOpcodes.HLT: 20>: <ducky.cpu.instructions.HLT object at 0x7f16cbd95250>, <DuckyOpcodes.IDLE: 21>: <ducky.cpu.instructions.IDLE object at 0x7f16cbd95310>, <DuckyOpcodes.LPM: 22>: <ducky.cpu.instructions.LPM object at 0x7f16cbda7350>, <DuckyOpcodes.IPI: 23>: <ducky.cpu.instructions.IPI object at 0x7f16cbe01f90>, <DuckyOpcodes.PUSH: 24>: <ducky.cpu.instructions.PUSH object at 0x7f16cbd95390>, <DuckyOpcodes.POP: 25>: <ducky.cpu.instructions.POP object at 0x7f16cbd953d0>, <DuckyOpcodes.INC: 26>: <ducky.cpu.instructions.INC object at 0x7f16cbd95410>, <DuckyOpcodes.DEC: 27>: <ducky.cpu.instructions.DEC object at 0x7f16cbd95450>, <DuckyOpcodes.ADD: 28>: <ducky.cpu.instructions.ADD object at 0x7f16cbd95490>, <DuckyOpcodes.SUB: 29>: <ducky.cpu.instructions.SUB object at 0x7f16cbd954d0>, <DuckyOpcodes.MUL: 30>: <ducky.cpu.instructions.MUL object at 0x7f16cbd95b50>, <DuckyOpcodes.DIV: 31>: <ducky.cpu.instructions.DIV object at 0x7f16cbd95b90>, <DuckyOpcodes.UDIV: 32>: <ducky.cpu.instructions.UDIV object at 0x7f16cbd95bd0>, <DuckyOpcodes.MOD: 33>: <ducky.cpu.instructions.MOD object at 0x7f16cbd95c10>, <DuckyOpcodes.AND: 34>: <ducky.cpu.instructions.AND object at 0x7f16cbd95710>, <DuckyOpcodes.OR: 35>: <ducky.cpu.instructions.OR object at 0x7f16cbd95750>, <DuckyOpcodes.XOR: 36>: <ducky.cpu.instructions.XOR object at 0x7f16cbd95790>, <DuckyOpcodes.NOT: 37>: <ducky.cpu.instructions.NOT object at 0x7f16cbd957d0>, <DuckyOpcodes.SHIFTL: 38>: <ducky.cpu.instructions.SHIFTL object at 0x7f16cbd95810>, <DuckyOpcodes.SHIFTR: 39>: <ducky.cpu.instructions.SHIFTR object at 0x7f16cbd95850>, <DuckyOpcodes.OUTW: 40>: <ducky.cpu.instructions.OUTW object at 0x7f16cbd95690>, <DuckyOpcodes.OUTS: 41>: <ducky.cpu.instructions.OUTS object at 0x7f16cbd95650>, <DuckyOpcodes.OUTB: 42>: <ducky.cpu.instructions.OUTB object at 0x7f16cbd956d0>, <DuckyOpcodes.INW: 43>: <ducky.cpu.instructions.INW object at 0x7f16cbd95590>, <DuckyOpcodes.INS: 44>: <ducky.cpu.instructions.INS object at 0x7f16cbd95610>, <DuckyOpcodes.INB: 45>: <ducky.cpu.instructions.INB object at 0x7f16cbd955d0>, <DuckyOpcodes.J: 46>: <ducky.cpu.instructions.J object at 0x7f16cbd95550>, <DuckyOpcodes.CMP: 47>: <ducky.cpu.instructions.CMP object at 0x7f16cbd95510>, <DuckyOpcodes.CMPU: 48>: <ducky.cpu.instructions.CMPU object at 0x7f16cbd95c50>, <DuckyOpcodes.SET: 49>: <ducky.cpu.instructions.SETLE object at 0x7f16cbda7310>, <DuckyOpcodes.BRANCH: 50>: <ducky.cpu.instructions.BLE object at 0x7f16cbd95fd0>, <DuckyOpcodes.CTR: 60>: <ducky.cpu.instructions.CTR object at 0x7f16cbda73d0>, <DuckyOpcodes.CTW: 61>: <ducky.cpu.instructions.CTW object at 0x7f16cbda7410>, <DuckyOpcodes.FPTC: 62>: <ducky.cpu.instructions.FPTC object at 0x7f16cbda7450>, <DuckyOpcodes.SIS: 63>: <ducky.cpu.instructions.SIS object at 0x7f16cbd95cd0>}
opcode_encoding_map = {<DuckyOpcodes.NOP: 0>: <class 'ducky.cpu.instructions.EncodingI'>, <DuckyOpcodes.LW: 1>: <class 'ducky.cpu.instructions.EncodingR'>, <DuckyOpcodes.LS: 2>: <class 'ducky.cpu.instructions.EncodingR'>, <DuckyOpcodes.LB: 3>: <class 'ducky.cpu.instructions.EncodingR'>, <DuckyOpcodes.STW: 4>: <class 'ducky.cpu.instructions.EncodingR'>, <DuckyOpcodes.STS: 5>: <class 'ducky.cpu.instructions.EncodingR'>, <DuckyOpcodes.STB: 6>: <class 'ducky.cpu.instructions.EncodingR'>, <DuckyOpcodes.CAS: 7>: <class 'ducky.cpu.instructions.EncodingA'>, <DuckyOpcodes.LA: 8>: <class 'ducky.cpu.instructions.EncodingI'>, <DuckyOpcodes.LI: 9>: <class 'ducky.cpu.instructions.EncodingI'>, <DuckyOpcodes.LIU: 10>: <class 'ducky.cpu.instructions.EncodingI'>, <DuckyOpcodes.MOV: 11>: <class 'ducky.cpu.instructions.EncodingR'>, <DuckyOpcodes.SWP: 12>: <class 'ducky.cpu.instructions.EncodingR'>, <DuckyOpcodes.INT: 13>: <class 'ducky.cpu.instructions.EncodingI'>, <DuckyOpcodes.RETINT: 14>: <class 'ducky.cpu.instructions.EncodingI'>, <DuckyOpcodes.CALL: 15>: <class 'ducky.cpu.instructions.EncodingI'>, <DuckyOpcodes.RET: 16>: <class 'ducky.cpu.instructions.EncodingI'>, <DuckyOpcodes.CLI: 17>: <class 'ducky.cpu.instructions.EncodingI'>, <DuckyOpcodes.STI: 18>: <class 'ducky.cpu.instructions.EncodingI'>, <DuckyOpcodes.RST: 19>: <class 'ducky.cpu.instructions.EncodingI'>, <DuckyOpcodes.HLT: 20>: <class 'ducky.cpu.instructions.EncodingI'>, <DuckyOpcodes.IDLE: 21>: <class 'ducky.cpu.instructions.EncodingI'>, <DuckyOpcodes.LPM: 22>: <class 'ducky.cpu.instructions.EncodingI'>, <DuckyOpcodes.IPI: 23>: <class 'ducky.cpu.instructions.EncodingR'>, <DuckyOpcodes.PUSH: 24>: <class 'ducky.cpu.instructions.EncodingI'>, <DuckyOpcodes.POP: 25>: <class 'ducky.cpu.instructions.EncodingR'>, <DuckyOpcodes.INC: 26>: <class 'ducky.cpu.instructions.EncodingR'>, <DuckyOpcodes.DEC: 27>: <class 'ducky.cpu.instructions.EncodingR'>, <DuckyOpcodes.ADD: 28>: <class 'ducky.cpu.instructions.EncodingR'>, <DuckyOpcodes.SUB: 29>: <class 'ducky.cpu.instructions.EncodingR'>, <DuckyOpcodes.MUL: 30>: <class 'ducky.cpu.instructions.EncodingR'>, <DuckyOpcodes.DIV: 31>: <class 'ducky.cpu.instructions.EncodingR'>, <DuckyOpcodes.UDIV: 32>: <class 'ducky.cpu.instructions.EncodingR'>, <DuckyOpcodes.MOD: 33>: <class 'ducky.cpu.instructions.EncodingR'>, <DuckyOpcodes.AND: 34>: <class 'ducky.cpu.instructions.EncodingR'>, <DuckyOpcodes.OR: 35>: <class 'ducky.cpu.instructions.EncodingR'>, <DuckyOpcodes.XOR: 36>: <class 'ducky.cpu.instructions.EncodingR'>, <DuckyOpcodes.NOT: 37>: <class 'ducky.cpu.instructions.EncodingR'>, <DuckyOpcodes.SHIFTL: 38>: <class 'ducky.cpu.instructions.EncodingR'>, <DuckyOpcodes.SHIFTR: 39>: <class 'ducky.cpu.instructions.EncodingR'>, <DuckyOpcodes.OUTW: 40>: <class 'ducky.cpu.instructions.EncodingR'>, <DuckyOpcodes.OUTS: 41>: <class 'ducky.cpu.instructions.EncodingR'>, <DuckyOpcodes.OUTB: 42>: <class 'ducky.cpu.instructions.EncodingR'>, <DuckyOpcodes.INW: 43>: <class 'ducky.cpu.instructions.EncodingR'>, <DuckyOpcodes.INS: 44>: <class 'ducky.cpu.instructions.EncodingR'>, <DuckyOpcodes.INB: 45>: <class 'ducky.cpu.instructions.EncodingR'>, <DuckyOpcodes.J: 46>: <class 'ducky.cpu.instructions.EncodingI'>, <DuckyOpcodes.CMP: 47>: <class 'ducky.cpu.instructions.EncodingR'>, <DuckyOpcodes.CMPU: 48>: <class 'ducky.cpu.instructions.EncodingR'>, <DuckyOpcodes.SET: 49>: <class 'ducky.cpu.instructions.EncodingC'>, <DuckyOpcodes.BRANCH: 50>: <class 'ducky.cpu.instructions.EncodingC'>, <DuckyOpcodes.CTR: 60>: <class 'ducky.cpu.instructions.EncodingR'>, <DuckyOpcodes.CTW: 61>: <class 'ducky.cpu.instructions.EncodingR'>, <DuckyOpcodes.FPTC: 62>: <class 'ducky.cpu.instructions.EncodingI'>, <DuckyOpcodes.SIS: 63>: <class 'ducky.cpu.instructions.EncodingI'>}
opcodes

alias of DuckyOpcodes

class ducky.cpu.instructions.DuckyOpcodes[source]

Bases: enum.IntEnum

ADD = <DuckyOpcodes.ADD: 28>
AND = <DuckyOpcodes.AND: 34>
BRANCH = <DuckyOpcodes.BRANCH: 50>
CALL = <DuckyOpcodes.CALL: 15>
CAS = <DuckyOpcodes.CAS: 7>
CLI = <DuckyOpcodes.CLI: 17>
CMP = <DuckyOpcodes.CMP: 47>
CMPU = <DuckyOpcodes.CMPU: 48>
CTR = <DuckyOpcodes.CTR: 60>
CTW = <DuckyOpcodes.CTW: 61>
DEC = <DuckyOpcodes.DEC: 27>
DIV = <DuckyOpcodes.DIV: 31>
FPTC = <DuckyOpcodes.FPTC: 62>
HLT = <DuckyOpcodes.HLT: 20>
IDLE = <DuckyOpcodes.IDLE: 21>
INB = <DuckyOpcodes.INB: 45>
INC = <DuckyOpcodes.INC: 26>
INS = <DuckyOpcodes.INS: 44>
INT = <DuckyOpcodes.INT: 13>
INW = <DuckyOpcodes.INW: 43>
IPI = <DuckyOpcodes.IPI: 23>
J = <DuckyOpcodes.J: 46>
LA = <DuckyOpcodes.LA: 8>
LB = <DuckyOpcodes.LB: 3>
LI = <DuckyOpcodes.LI: 9>
LIU = <DuckyOpcodes.LIU: 10>
LPM = <DuckyOpcodes.LPM: 22>
LS = <DuckyOpcodes.LS: 2>
LW = <DuckyOpcodes.LW: 1>
MOD = <DuckyOpcodes.MOD: 33>
MOV = <DuckyOpcodes.MOV: 11>
MUL = <DuckyOpcodes.MUL: 30>
NOP = <DuckyOpcodes.NOP: 0>
NOT = <DuckyOpcodes.NOT: 37>
OR = <DuckyOpcodes.OR: 35>
OUTB = <DuckyOpcodes.OUTB: 42>
OUTS = <DuckyOpcodes.OUTS: 41>
OUTW = <DuckyOpcodes.OUTW: 40>
POP = <DuckyOpcodes.POP: 25>
PUSH = <DuckyOpcodes.PUSH: 24>
RET = <DuckyOpcodes.RET: 16>
RETINT = <DuckyOpcodes.RETINT: 14>
RST = <DuckyOpcodes.RST: 19>
SET = <DuckyOpcodes.SET: 49>
SHIFTL = <DuckyOpcodes.SHIFTL: 38>
SHIFTR = <DuckyOpcodes.SHIFTR: 39>
SIS = <DuckyOpcodes.SIS: 63>
STB = <DuckyOpcodes.STB: 6>
STI = <DuckyOpcodes.STI: 18>
STS = <DuckyOpcodes.STS: 5>
STW = <DuckyOpcodes.STW: 4>
SUB = <DuckyOpcodes.SUB: 29>
SWP = <DuckyOpcodes.SWP: 12>
UDIV = <DuckyOpcodes.UDIV: 32>
XOR = <DuckyOpcodes.XOR: 36>
ducky.cpu.instructions.ENCODE(logger, buffer, inst, field, size, value, raise_on_large_value=False)[source]
class ducky.cpu.instructions.Encoding[source]

Bases: _ctypes.Structure

static sign_extend_immediate(logger, inst, sign_mask, ext_mask)[source]
class ducky.cpu.instructions.EncodingA[source]

Bases: _ctypes.Structure

opcode

Structure/Union member

reg1

Structure/Union member

reg2

Structure/Union member

reg3

Structure/Union member

class ducky.cpu.instructions.EncodingC[source]

Bases: _ctypes.Structure

static fill_reloc_slot(logger, inst, slot)[source]
flag

Structure/Union member

immediate

Structure/Union member

immediate_flag

Structure/Union member

opcode

Structure/Union member

reg

Structure/Union member

static sign_extend_immediate(logger, inst)[source]
value

Structure/Union member

class ducky.cpu.instructions.EncodingI[source]

Bases: _ctypes.Structure

static fill_reloc_slot(logger, inst, slot)[source]
immediate

Structure/Union member

immediate_flag

Structure/Union member

opcode

Structure/Union member

reg

Structure/Union member

static sign_extend_immediate(logger, inst)[source]
class ducky.cpu.instructions.EncodingR[source]

Bases: _ctypes.Structure

static fill_reloc_slot(logger, inst, slot)[source]
immediate

Structure/Union member

immediate_flag

Structure/Union member

opcode

Structure/Union member

reg1

Structure/Union member

reg2

Structure/Union member

static sign_extend_immediate(logger, inst)[source]
class ducky.cpu.instructions.FPTC(instruction_set)[source]

Bases: ducky.cpu.instructions.Descriptor

encoding

alias of EncodingI

static execute(core, inst)[source]
mnemonic = 'fptc'
opcode = <DuckyOpcodes.FPTC: 62>
class ducky.cpu.instructions.HLT(instruction_set)[source]

Bases: ducky.cpu.instructions.Descriptor_RI

static execute(core, inst)[source]
mnemonic = 'hlt'
opcode = <DuckyOpcodes.HLT: 20>
class ducky.cpu.instructions.IDLE(instruction_set)[source]

Bases: ducky.cpu.instructions.Descriptor

encoding

alias of EncodingI

static execute(core, inst)[source]
mnemonic = 'idle'
opcode = <DuckyOpcodes.IDLE: 21>
ducky.cpu.instructions.IE_FLAG(n)[source]
ducky.cpu.instructions.IE_IMM(n, l)[source]
ducky.cpu.instructions.IE_OPCODE()[source]
ducky.cpu.instructions.IE_REG(n)[source]
class ducky.cpu.instructions.INB(instruction_set)[source]

Bases: ducky.cpu.instructions._IN

mnemonic = 'inb'
opcode = <DuckyOpcodes.INB: 45>
class ducky.cpu.instructions.INC(instruction_set)[source]

Bases: ducky.cpu.instructions.Descriptor_R

static execute(core, inst)[source]
static jit(core, inst)[source]
mnemonic = 'inc'
opcode = <DuckyOpcodes.INC: 26>
class ducky.cpu.instructions.INS(instruction_set)[source]

Bases: ducky.cpu.instructions._IN

mnemonic = 'ins'
opcode = <DuckyOpcodes.INS: 44>
class ducky.cpu.instructions.INT(instruction_set)[source]

Bases: ducky.cpu.instructions.Descriptor_RI

static execute(core, inst)[source]
mnemonic = 'int'
opcode = <DuckyOpcodes.INT: 13>
class ducky.cpu.instructions.INW(instruction_set)[source]

Bases: ducky.cpu.instructions._IN

mnemonic = 'inw'
opcode = <DuckyOpcodes.INW: 43>
class ducky.cpu.instructions.IPI(instruction_set)[source]

Bases: ducky.cpu.instructions.Descriptor_R_RI

static execute(core, inst)[source]
mnemonic = 'ipi'
opcode = <DuckyOpcodes.IPI: 23>
class ducky.cpu.instructions.InstructionSet[source]

Bases: object

classmethod decode_instruction(logger, inst, core=None)[source]
classmethod disassemble_instruction(logger, inst)[source]
classmethod init()[source]
instruction_set_id = None
instructions = []
opcodes = None
class ducky.cpu.instructions.InstructionSetMetaclass(name, bases, dict)[source]

Bases: type

class ducky.cpu.instructions.J(instruction_set)[source]

Bases: ducky.cpu.instructions._JUMP

static execute(core, inst)[source]
static jit(core, inst)[source]
mnemonic = 'j'
opcode = <DuckyOpcodes.J: 46>
ducky.cpu.instructions.JUMP(core, inst)[source]
class ducky.cpu.instructions.LA(instruction_set)[source]

Bases: ducky.cpu.instructions._LOAD_IMM

static jit(core, inst)[source]
classmethod load(core, inst)[source]
mnemonic = 'la'
opcode = <DuckyOpcodes.LA: 8>
relative_address = True
class ducky.cpu.instructions.LB(instruction_set)[source]

Bases: ducky.cpu.instructions._LOAD

mnemonic = 'lb'
opcode = <DuckyOpcodes.LB: 3>
class ducky.cpu.instructions.LI(instruction_set)[source]

Bases: ducky.cpu.instructions._LOAD_IMM

static jit(core, inst)[source]
classmethod load(core, inst)[source]
mnemonic = 'li'
opcode = <DuckyOpcodes.LI: 9>
class ducky.cpu.instructions.LIU(instruction_set)[source]

Bases: ducky.cpu.instructions._LOAD_IMM

classmethod load(core, inst)[source]
mnemonic = 'liu'
opcode = <DuckyOpcodes.LIU: 10>
class ducky.cpu.instructions.LPM(instruction_set)[source]

Bases: ducky.cpu.instructions.Descriptor

encoding

alias of EncodingI

static execute(core, inst)[source]
mnemonic = 'lpm'
opcode = <DuckyOpcodes.LPM: 22>
class ducky.cpu.instructions.LS(instruction_set)[source]

Bases: ducky.cpu.instructions._LOAD

mnemonic = 'ls'
opcode = <DuckyOpcodes.LS: 2>
class ducky.cpu.instructions.LW(instruction_set)[source]

Bases: ducky.cpu.instructions._LOAD

mnemonic = 'lw'
opcode = <DuckyOpcodes.LW: 1>
class ducky.cpu.instructions.MOD(instruction_set)[source]

Bases: ducky.cpu.instructions._BINOP

mnemonic = 'mod'
opcode = <DuckyOpcodes.MOD: 33>
class ducky.cpu.instructions.MOV(instruction_set)[source]

Bases: ducky.cpu.instructions.Descriptor_R_R

encoding

alias of EncodingR

static execute(core, inst)[source]
static jit(core, inst)[source]
mnemonic = 'mov'
opcode = <DuckyOpcodes.MOV: 11>
class ducky.cpu.instructions.MUL(instruction_set)[source]

Bases: ducky.cpu.instructions._BINOP

static jit(core, inst)[source]
mnemonic = 'mul'
opcode = <DuckyOpcodes.MUL: 30>
class ducky.cpu.instructions.NOP(instruction_set)[source]

Bases: ducky.cpu.instructions.Descriptor

encoding

alias of EncodingI

static execute(core, inst)[source]
mnemonic = 'nop'
opcode = <DuckyOpcodes.NOP: 0>
class ducky.cpu.instructions.NOT(instruction_set)[source]

Bases: ducky.cpu.instructions.Descriptor_R

encoding

alias of EncodingR

static execute(core, inst)[source]
mnemonic = 'not'
opcode = <DuckyOpcodes.NOT: 37>
class ducky.cpu.instructions.OR(instruction_set)[source]

Bases: ducky.cpu.instructions._BITOP

static jit(core, inst)[source]
mnemonic = 'or'
opcode = <DuckyOpcodes.OR: 35>
class ducky.cpu.instructions.OUTB(instruction_set)[source]

Bases: ducky.cpu.instructions._OUT

mnemonic = 'outb'
opcode = <DuckyOpcodes.OUTB: 42>
class ducky.cpu.instructions.OUTS(instruction_set)[source]

Bases: ducky.cpu.instructions._OUT

mnemonic = 'outs'
opcode = <DuckyOpcodes.OUTS: 41>
class ducky.cpu.instructions.OUTW(instruction_set)[source]

Bases: ducky.cpu.instructions._OUT

mnemonic = 'outw'
opcode = <DuckyOpcodes.OUTW: 40>
class ducky.cpu.instructions.POP(instruction_set)[source]

Bases: ducky.cpu.instructions.Descriptor_R

static execute(core, inst)[source]
static jit(core, inst)[source]
mnemonic = 'pop'
opcode = <DuckyOpcodes.POP: 25>
class ducky.cpu.instructions.PUSH(instruction_set)[source]

Bases: ducky.cpu.instructions.Descriptor_RI

static execute(core, inst)[source]
static jit(core, inst)[source]
mnemonic = 'push'
opcode = <DuckyOpcodes.PUSH: 24>
class ducky.cpu.instructions.RET(instruction_set)[source]

Bases: ducky.cpu.instructions.Descriptor

encoding

alias of EncodingI

static execute(core, inst)[source]
static jit(core, inst)[source]
mnemonic = 'ret'
opcode = <DuckyOpcodes.RET: 16>
class ducky.cpu.instructions.RETINT(instruction_set)[source]

Bases: ducky.cpu.instructions.Descriptor

encoding

alias of EncodingI

static execute(core, inst)[source]
mnemonic = 'retint'
opcode = <DuckyOpcodes.RETINT: 14>
ducky.cpu.instructions.RI_ADDR(core, inst, reg)[source]
ducky.cpu.instructions.RI_VAL(core, inst, reg, sign_extend=True)[source]
class ducky.cpu.instructions.RST(instruction_set)[source]

Bases: ducky.cpu.instructions.Descriptor

encoding

alias of EncodingI

static execute(core, inst)[source]
mnemonic = 'rst'
opcode = <DuckyOpcodes.RST: 19>
class ducky.cpu.instructions.SETE(instruction_set)[source]

Bases: ducky.cpu.instructions._SET

mnemonic = 'sete'
class ducky.cpu.instructions.SETG(instruction_set)[source]

Bases: ducky.cpu.instructions._SET

mnemonic = 'setg'
class ducky.cpu.instructions.SETGE(instruction_set)[source]

Bases: ducky.cpu.instructions._SET

mnemonic = 'setge'
class ducky.cpu.instructions.SETL(instruction_set)[source]

Bases: ducky.cpu.instructions._SET

mnemonic = 'setl'
class ducky.cpu.instructions.SETLE(instruction_set)[source]

Bases: ducky.cpu.instructions._SET

mnemonic = 'setle'
class ducky.cpu.instructions.SETNE(instruction_set)[source]

Bases: ducky.cpu.instructions._SET

mnemonic = 'setne'
class ducky.cpu.instructions.SETNO(instruction_set)[source]

Bases: ducky.cpu.instructions._SET

mnemonic = 'setno'
class ducky.cpu.instructions.SETNS(instruction_set)[source]

Bases: ducky.cpu.instructions._SET

mnemonic = 'setns'
class ducky.cpu.instructions.SETNZ(instruction_set)[source]

Bases: ducky.cpu.instructions._SET

mnemonic = 'setnz'
class ducky.cpu.instructions.SETO(instruction_set)[source]

Bases: ducky.cpu.instructions._SET

mnemonic = 'seto'
class ducky.cpu.instructions.SETS(instruction_set)[source]

Bases: ducky.cpu.instructions._SET

mnemonic = 'sets'
class ducky.cpu.instructions.SETZ(instruction_set)[source]

Bases: ducky.cpu.instructions._SET

mnemonic = 'setz'
class ducky.cpu.instructions.SHIFTL(instruction_set)[source]

Bases: ducky.cpu.instructions._BITOP

static jit(core, inst)[source]
mnemonic = 'shiftl'
opcode = <DuckyOpcodes.SHIFTL: 38>
class ducky.cpu.instructions.SHIFTR(instruction_set)[source]

Bases: ducky.cpu.instructions._BITOP

static jit(core, inst)[source]
mnemonic = 'shiftr'
opcode = <DuckyOpcodes.SHIFTR: 39>
class ducky.cpu.instructions.SIS(instruction_set)[source]

Bases: ducky.cpu.instructions.Descriptor_RI

static execute(core, inst)[source]
mnemonic = 'sis'
opcode = <DuckyOpcodes.SIS: 63>
class ducky.cpu.instructions.STB(instruction_set)[source]

Bases: ducky.cpu.instructions._STORE

mnemonic = 'stb'
opcode = <DuckyOpcodes.STB: 6>
class ducky.cpu.instructions.STI(instruction_set)[source]

Bases: ducky.cpu.instructions.Descriptor

encoding

alias of EncodingI

static execute(core, inst)[source]
mnemonic = 'sti'
opcode = <DuckyOpcodes.STI: 18>
class ducky.cpu.instructions.STS(instruction_set)[source]

Bases: ducky.cpu.instructions._STORE

mnemonic = 'sts'
opcode = <DuckyOpcodes.STS: 5>
class ducky.cpu.instructions.STW(instruction_set)[source]

Bases: ducky.cpu.instructions._STORE

mnemonic = 'stw'
opcode = <DuckyOpcodes.STW: 4>
class ducky.cpu.instructions.SUB(instruction_set)[source]

Bases: ducky.cpu.instructions._BINOP

static jit(core, inst)[source]
mnemonic = 'sub'
opcode = <DuckyOpcodes.SUB: 29>
class ducky.cpu.instructions.SWP(instruction_set)[source]

Bases: ducky.cpu.instructions.Descriptor_R_R

encoding

alias of EncodingR

static execute(core, inst)[source]
static jit(core, inst)[source]
mnemonic = 'swp'
opcode = <DuckyOpcodes.SWP: 12>
class ducky.cpu.instructions.UDIV(instruction_set)[source]

Bases: ducky.cpu.instructions._BINOP

mnemonic = 'udiv'
opcode = <DuckyOpcodes.UDIV: 32>
ducky.cpu.instructions.UINT20_FMT(i)[source]
class ducky.cpu.instructions.XOR(instruction_set)[source]

Bases: ducky.cpu.instructions._BITOP

static jit(core, inst)[source]
mnemonic = 'xor'
opcode = <DuckyOpcodes.XOR: 36>
ducky.cpu.instructions.encoding_to_u32(inst)[source]
ducky.cpu.instructions.get_instruction_set(i, exc=None)[source]
ducky.cpu.instructions.u32_to_encoding(u, encoding)[source]
ducky.cpu.instructions.update_arith_flags(core, reg)[source]

Set relevant arithmetic flags according to content of registers. Flags are set to zero at the beginning, then content of each register is examined, and S and Z flags are set.

E flag is not touched, O flag is set to zero.

Parameters:reg (u32_t) – register