Pigeon Computer 0.1 documentation

Appendix B: Supported Assembly Instructions

«  Appendix A: ATmega328P Definitions   ::   Contents

Appendix B: Supported Assembly Instructions

Currently forty-three instructions are implemented.

It’s not hard to add the rest, it’s just those are the ones I needed to get the firmware running.

class pigeon.assembler.instructions.InstructionsMixin[source]

Bases: object

add(arg0=None, arg1=None)[source]
adiw(arg0=None, arg1=None)[source]
andi(arg0=None, arg1=None)[source]
brcc(arg0=None, arg1=None)[source]
breq(arg0=None, arg1=None)[source]
brlo(arg0=None, arg1=None)[source]
brne(arg0=None, arg1=None)[source]
brsh(arg0=None, arg1=None)[source]
cli(arg0=None, arg1=None)[source]
clr(arg0=None, arg1=None)[source]
cp(arg0=None, arg1=None)[source]
cpc(arg0=None, arg1=None)[source]
cpi(arg0=None, arg1=None)[source]
cpse(arg0=None, arg1=None)[source]
dec(arg0=None, arg1=None)[source]
ijmp(arg0=None, arg1=None)[source]
inc(arg0=None, arg1=None)[source]
jmp(arg0=None, arg1=None)[source]
ld_post_incr(ptr, register)[source]
ld_pre_decr(ptr, register)[source]
ldi(arg0=None, arg1=None)[source]
lds(arg0=None, arg1=None)[source]
lpm(target, source)[source]
lpm_post_incr(ptr, register)[source]
lsl(arg0=None, arg1=None)[source]
lsr(arg0=None, arg1=None)[source]
mov(arg0=None, arg1=None)[source]
movw(arg0=None, arg1=None)[source]
mul(arg0=None, arg1=None)[source]
ops = {'brsh': <function brsh at 0x3259938>, 'rcall': <function rcall at 0x3257c80>, 'cpse': <function cpse at 0x3259758>, 'lsl': <function lsl at 0x3259140>, 'pop': <function pop at 0x3259ed8>, 'lds': <function lds at 0x32581b8>, 'lsr': <function lsr at 0x3259050>, 'ijmp': <function ijmp at 0x3259578>, 'movw': <function movw at 0x3259a28>, 'cp': <function cp at 0x3259668>, 'dec': <function dec at 0x3259500>, 'ld_pre_decr_Z': <function ld_pre_decr_Z at 0x3258938>, 'ld_pre_decr_Y': <function ld_pre_decr_Y at 0x3258668>, 'out': <function out at 0x3257b90>, 'andi': <function andi at 0x3259b18>, 'cli': <function cli at 0x32579b0>, 'st_post_incr_Z': <function st_post_incr_Z at 0x3258578>, 'ret': <function ret at 0x3257f50>, 'add': <function add at 0x3259230>, 'sei': <function sei at 0x3257ed8>, 'mul': <function mul at 0x325a500>, 'inc': <function inc at 0x3259410>, 'ldi': <function ldi at 0x3257aa0>, 'clr': <function clr at 0x3259cf8>, 'rjmp': <function rjmp at 0x32580c8>, 'swap': <function swap at 0x325a140>, 'adiw': <function adiw at 0x325a230>, 'jmp': <function jmp at 0x3257938>, 'db': <function db at 0x3258398>, 'mov': <function mov at 0x3257e60>, 'lpm_post_incr_Z': <function lpm_post_incr_Z at 0x3258b18>, 'ld_post_incr_X': <function ld_post_incr_X at 0x3258758>, 'ld_post_incr_Z': <function ld_post_incr_Z at 0x3258848>, 'brne': <function brne at 0x3258cf8>, 'dw': <function dw at 0x3258320>, 'brlo': <function brlo at 0x3258ed8>, 'subi': <function subi at 0x325a410>, 'or_': <function or_ at 0x325a050>, 'cpi': <function cpi at 0x3258c08>, 'cpc': <function cpc at 0x3259848>, 'st_post_incr_Y': <function st_post_incr_Y at 0x3258488>, 'lpm': <function lpm at 0x3258a28>, 'sbrs': <function sbrs at 0x32582a8>, 'sts': <function sts at 0x3257d70>, 'push': <function push at 0x3259de8>, 'brcc': <function brcc at 0x3259320>, 'sbiw': <function sbiw at 0x325a320>, 'breq': <function breq at 0x3258de8>, 'sbis': <function sbis at 0x3259c08>}
or_(arg0=None, arg1=None)[source]
out(arg0=None, arg1=None)[source]
pop(arg0=None, arg1=None)[source]
push(arg0=None, arg1=None)[source]
rcall(arg0=None, arg1=None)[source]
ret(arg0=None, arg1=None)[source]
rjmp(arg0=None, arg1=None)[source]
sbiw(arg0=None, arg1=None)[source]
sbrs(arg0=None, arg1=None)[source]
sei(arg0=None, arg1=None)[source]
st_post_incr(ptr, register)[source]
sts(arg0=None, arg1=None)[source]
subi(arg0=None, arg1=None)[source]
swap(arg0=None, arg1=None)[source]
pigeon.assembler.instructions.add(Rd, Rr)[source]

0000 11rd dddd rrrr

pigeon.assembler.instructions.adiw(register, address)[source]

1001 0110 KKdd KKKK

pigeon.assembler.instructions.andi(register, address)[source]

0111 KKKK dddd KKKK

pigeon.assembler.instructions.brcc(address)[source]

1111 01kk kkkk k000

pigeon.assembler.instructions.breq(address)[source]

1111 00kk kkkk k001

pigeon.assembler.instructions.brlo(address)[source]

1111 00kk kkkk k000

pigeon.assembler.instructions.brne(address)[source]

1111 01kk kkkk k001

pigeon.assembler.instructions.brsh(address)[source]

1111 01kk kkkk k000

pigeon.assembler.instructions.cli()[source]
pigeon.assembler.instructions.clr(Rd, Rr)[source]

0010 01rd dddd rrrr

pigeon.assembler.instructions.cp(Rd, Rr)[source]

0001 01rd dddd rrrr

pigeon.assembler.instructions.cpc(Rd, Rr)[source]

0000 01rd dddd rrrr

pigeon.assembler.instructions.cpi(register, address)[source]

0011 KKKK dddd KKKK

pigeon.assembler.instructions.cpse(Rd, Rr)[source]

0001 00rd dddd rrrr

pigeon.assembler.instructions.db(values, data)[source]
pigeon.assembler.instructions.dec(Rd)[source]

1001 010d dddd 1010

pigeon.assembler.instructions.dw(values, data)[source]
pigeon.assembler.instructions.ijmp()[source]
pigeon.assembler.instructions.inc(Rd)[source]

1001 010d dddd 0011

pigeon.assembler.instructions.jmp(address)[source]

1001 010k kkkk 110k kkkk kkkk kkkk kkkk

pigeon.assembler.instructions.ld_post_incr_X(Rd)[source]

1001 000d dddd 1101

pigeon.assembler.instructions.ld_post_incr_Z(Rd)[source]

1001 000d dddd 0001

pigeon.assembler.instructions.ld_pre_decr_Y(Rd)[source]

1001 000d dddd 1010

pigeon.assembler.instructions.ld_pre_decr_Z(Rd)[source]

1001 000d dddd 0010

pigeon.assembler.instructions.ldi(register, address)[source]

1110 KKKK dddd KKKK

pigeon.assembler.instructions.lds(register, address)[source]

1001 000d dddd 0000 kkkk kkkk kkkk kkkk

pigeon.assembler.instructions.lpm(Rd)[source]

1001 000d dddd 0100

pigeon.assembler.instructions.lpm_post_incr_Z(Rd)[source]

1001 000d dddd 0101

pigeon.assembler.instructions.lsl(Rd, Rr)[source]

0000 11rd dddd rrrr

pigeon.assembler.instructions.lsr(Rd)[source]

1001 010d dddd 0110

pigeon.assembler.instructions.mov(Rd, Rr)[source]

0010 11rd dddd rrrr

pigeon.assembler.instructions.movw(Rd, Rr)[source]

0000 0001 dddd rrrr

pigeon.assembler.instructions.mul(Rd, Rr)[source]

1001 11rd dddd rrrr

pigeon.assembler.instructions.or_(Rd, Rr)[source]

0010 10rd dddd rrrr

pigeon.assembler.instructions.out(io_port, register)[source]

1011 1AAr rrrr AAAA

pigeon.assembler.instructions.pop(Rd)[source]

1001 000d dddd 1111

pigeon.assembler.instructions.push(Rr)[source]

1001 001r rrrr 1111

pigeon.assembler.instructions.rcall(address)[source]

1101 kkkk kkkk kkkk

pigeon.assembler.instructions.ret()[source]
pigeon.assembler.instructions.rjmp(address)[source]

1100 kkkk kkkk kkkk

pigeon.assembler.instructions.sbis(register, bit)[source]

1001 1011 AAAA Abbb

pigeon.assembler.instructions.sbiw(register, address)[source]

1001 0111 KKdd KKKK

pigeon.assembler.instructions.sbrs(Rr, bit)[source]

1111 111r rrrr 0bbb

pigeon.assembler.instructions.sei()[source]
pigeon.assembler.instructions.st_post_incr_Y(Rr)[source]

1001 001r rrrr 1001

pigeon.assembler.instructions.st_post_incr_Z(Rr)[source]

1001 001r rrrr 0001

pigeon.assembler.instructions.sts(address, register)[source]

1001 001d dddd 0000 kkkk kkkk kkkk kkkk

pigeon.assembler.instructions.subi(register, address)[source]

0101 KKKK dddd KKKK

pigeon.assembler.instructions.swap(Rd)[source]

1001 010d dddd 0010

«  Appendix A: ATmega328P Definitions   ::   Contents