# # $Id: README.opcodes,v 1.3 2001/12/02 21:54:45 troth Exp $ # ############################################################################## ## ## Most of the information in this file was taken directly from the Atmel ## data sheets and is most likely copyrighted by Atmel. As such, this file ## may need to disappear. ## ############################################################################## Instruction Set Nomenclature: Status Register (SREG) SREG: Status register C: Carry flag in status register Z: Zero flag in status register N: Negative flag in status register V: Two's complement overflow indicator S: N A* V, For signed tests H: Half Carry flag in the status register T: Transfer bit used by BLD and BST instructions I: Global interrupt enable/disable flag Registers and Operands Rd: Destination (and source) register in the register file Rr: Source register in the register file R: Result after instruction is executed K: Constant data k: Constant address b: Bit in the register file or I/O register (3 bit) s: Bit in the status register (3 bit) X,Y,Z: Indirect address register (X=R27:R26, Y=R29:R28 and Z=R31:R30) A: I/O location address q: Displacement for direct addressing (6 bit) I/O Registers RAMPX, RAMPY, RAMPZ Registers concatenated with the X, Y and Z registers enabling indirect addressing of the whole data space on MCUs withmore than 64K bytes data space, and constant data fetch on MCUs with more than 64K bytes program space. RAMPD Register concatenated with the Z register enabling direct addressing of the whole data space on MCUs with more than 64Kbytes data space. EIND Register concatenated with the instruction word enabling indirect jump and call to the whole program space on MCUs withmore than 64K bytes program space. Stack STACK: Stack for return address and pushed registers SP: Stack Pointer to STACK Flags <=>: Flag affected by instruction 0: Flag cleared by instruction 1: Flag set by instruction -: Flag not affected by instruction Conditional Branch Summary Note: 1. Interchange Rd and Rr in the operation before the test. i.e. CP Rd,Rr -> CP Rr,Rd Test Boolean Mnemonic Complementary Boolean Mnemonic Comment Rd > Rr Z&(N ^ V) = 0 BRLT(1) Rd <= Rr Z+(N ^ V) = 1 BRGE* Signed Rd >= Rr (N ^ V) = 0 BRGE Rd < Rr (N ^ V) = 1 BRLT Signed Rd = Rr Z = 1 BREQ Rd != Rr Z = 0 BRNE Signed Rd <= Rr Z+(N ^ V) = 1 BRGE(1) Rd > Rr Z&(N ^ V) = 0 BRLT* Signed Rd < Rr (N ^ V) = 1 BRLT Rd >= Rr (N ^ V) = 0 BRGE Signed Rd > Rr C + Z = 0 BRLO(1) Rd <= Rr C + Z = 1 BRSH* Unsigned Rd >= Rr C = 0 BRSH/BRCC Rd < Rr C = 1 BRLO/BRCS Unsigned Rd = Rr Z = 1 BREQ Rd != Rr Z = 0 BRNE Unsigned Rd <= Rr C + Z = 1 BRSH(1) Rd > Rr C + Z = 0 BRLO* Unsigned Rd < Rr C = 1 BRLO/BRCS Rd >= Rr C = 0 BRSH/BRCC Unsigned Carry C = 1 BRCS No carry C = 0 BRCC Simple Negative N = 1 BRMI Positive N = 0 BRPL Simple Overflow V = 1 BRVS No overflow V = 0 BRVC Simple Zero Z = 1 BREQ Not zero Z = 0 BRNE Simple Complete Instruction Set Summary Notes: 1. Not all instructions are available in all devices. Refer to the device specific instruction summary. 2. Cycle times for data memory accesses assume internal memory accesses, and are not valid for accesses via the external RAM interface. For LD, ST, LDS, STS, PUSH, POP, add one cycle plus one cycle for each wait state. For CALL, ICALL, EICALL, RCALL, RET, RETI in devices with 16 bit PC, add three cycles plus two cycles for each wait state. For CALL, ICALL, EICALL, RCALL, RET, RETI in devices with 22 bit PC, add five cycles plus three cycles for each wait state. Instruction Set Summary Arithmetic and Logic Instructions | | | | Device Availability| Mnem | Opcode | Operands | Method Name | 1200 | 4414 | 8515 | =======|=====================|==========|=============|======|======|======| ADC | 0001 11rd dddd rrrr | Rd, Rr | ADC | * | * | * | ADD | 0000 11rd dddd rrrr | Rd, Rr | ADD | * | * | * | ADIW | 1001 0110 KKdd KKKK | Rd, Rr | ADIW | - | * | * | AND | 0010 00rd dddd rrrr | Rd, Rr | AND | * | * | * | ANDI | 0111 KKKK dddd KKKK | Rd, K | ANDI | * | * | * | ASR | 1001 010d dddd 0101 | Rd | ASR | * | * | * | BCLR | 1001 0100 1sss 1000 | s | BCLR | * | * | * | BLD | 1111 100d dddd 0bbb | Rd, b | BLD | * | * | * | BRBC | 1111 01kk kkkk ksss | s, k | BRCS | * | * | * | BRBS | 1111 00kk kkkk ksss | s, k | BRBS | * | * | * | BRCC | 1111 01kk kkkk k000 | k | BRCC | * | * | * | BRCS | 1111 00kk kkkk k000 | k | BRCS | * | * | * | BREQ | 1111 00kk kkkk k001 | k | BREQ | * | * | * | BRGE | 1111 01kk kkkk k100 | k | BRGE | * | * | * | BRHC | 1111 01kk kkkk k101 | k | BRHC | * | * | * | BRHS | 1111 00kk kkkk k101 | k | BRHS | * | * | * | BRID | 1111 01kk kkkk k111 | k | BRID | * | * | * | BRIE | 1111 00kk kkkk k111 | k | BRIE | * | * | * | BRLO | 1111 00kk kkkk k000 | k | BRCS | * | * | * | BRLT | 1111 00kk kkkk k100 | k | BRLT | * | * | * | BRMI | 1111 00kk kkkk k010 | k | BRMI | * | * | * | BRNE | 1111 01kk kkkk k001 | k | BRNE | * | * | * | BRPL | 1111 01kk kkkk k010 | k | BRPL | * | * | * | BRSH | 1111 01kk kkkk k000 | k | BRCC | * | * | * | BRTC | 1111 01kk kkkk k110 | k | BRTC | * | * | * | BRTS | 1111 00kk kkkk k110 | k | BRTS | * | * | * | BRVC | 1111 01kk kkkk k011 | k | BRVC | * | * | * | BRVS | 1111 00kk kkkk k011 | k | BRVS | * | * | * | BSET | 1001 0100 0sss 1000 | s | BSET | * | * | * | BST | 1111 101d dddd 0bbb | Rr, b | BST | * | * | * | CALL | 1001 010k kkkk 111k | k | CALL | - | - | - | | kkkk kkkk kkkk kkkk | | | | | | CBI | 1001 1000 AAAA Abbb | A, b | CBI | * | * | * | CBR | 0111 KKKK dddd KKKK | Rd, K | CBR | * | * | * | CLC | 1001 0100 1000 1000 | | CLC | * | * | * | CLH | 1001 0100 1101 1000 | | CLH | * | * | * | CLI | 1001 0100 1111 1000 | | CLI | * | * | * | CLN | 1001 0100 1010 1000 | | CLN | * | * | * | CLR | 0010 01dd dddd dddd | Rd | EOR | * | * | * | CLS | 1001 0100 1100 1000 | | CLS | * | * | * | CLT | 1001 0100 1110 1000 | | CLT | * | * | * | CLV | 1001 0100 1011 1000 | | CLV | * | * | * | CLZ | 1001 0100 1001 1000 | | CLZ | * | * | * | COM | 1001 010d dddd 0000 | Rd | COM | * | * | * | CP | 0001 01rd dddd rrrr | Rd, Rr | CP | * | * | * | CPC | 0000 01rd dddd rrrr | Rd, Rr | CPC | * | * | * | CPI | 0011 KKKK dddd KKKK | Rd, K | CPI | * | * | * | CPSE | 0001 00rd dddd rrrr | Rd, Rr | CPSE | * | * | * | DEC | 1001 010d dddd 1010 | Rd | DEC | * | * | * | EICALL | 1001 0101 0001 1001 | | EICALL | - | - | - | EIJMP | 1001 0100 0001 1001 | | EIJMP | - | - | - | ELPM | 1001 0101 1101 1000 | | ELPM | - | - | - | ELPM | 1001 000d dddd 0110 | Rd, Z | ELPM_Z | - | - | - | ELPM | 1001 000d dddd 0111 | Rd, Z+ | ELPM_Z_incr | - | - | - | EOR | 0010 01rd dddd rrrr | Rd, Rr | EOR | * | * | * | ESPM | 1001 0101 1111 1000 | | ESPM | - | - | - | FMUL | 0000 0011 0ddd 1rrr | Rd, Rr | FMUL | - | - | - | FMULS | 0000 0011 1ddd 0rrr | Rd, Rr | FMULS | - | - | - | FMULSU | 0000 0011 1ddd 1rrr | Rd, Rr | FMULSU | - | - | - | ICALL | 1001 0101 0000 1001 | | ICALL | - | * | * | IJMP | 1001 0100 0000 1001 | | IJMP | - | * | * | IN | 1011 0AAd dddd AAAA | Rd, A | IN | * | * | * | INC | 1001 010d dddd 0011 | Rd | INC | * | * | * | JMP | 1001 010k kkkk 110k | k | JMP | - | - | - | | kkkk kkkk kkkk kkkk | | | | | | LD | 1000 000d dddd 1000 | Rd, Y | LDD_Y | - | * | * | LD | 1001 000d dddd 1001 | Rd, Y+ | LD_Y_incr | - | * | * | LD | 1000 000d dddd 0000 | Rd, Z | LDD_Z | * | * | * | LD | 1001 000d dddd 0001 | Rd, Z+ | LD_Z_incr | - | * | * | LD | 1001 000d dddd 1110 | Rd, -X | LD_X_decr | - | * | * | LD | 1001 000d dddd 1010 | Rd, -Y | LD_Y_decr | - | * | * | LD | 1001 000d dddd 0010 | Rd, -Z | LD_Z_decr | - | * | * | LD | 1001 000d dddd 1100 | Rd, X | LD_X | - | * | * | LD | 1001 000d dddd 1101 | Rd, X+ | LD_X_incr | - | * | * | LDD | 10q0 qq0d dddd 1qqq | Rd, Y+q | LDD_Y | - | * | * | LDD | 10q0 qq0d dddd 0qqq | Rd, Z+q | LDD_Z | - | * | * | LDI | 1110 KKKK dddd KKKK | Rd, K | LDI | * | * | * | LDS | 1001 000d dddd 0000 | Rd, k | LDS | - | * | * | | kkkk kkkk kkkk kkkk | | | | | | LPM | 1001 0101 1100 1000 | | LPM | - | * | * | LPM | 1001 000d dddd 0100 | Rd, Z | LPM_Z | - | - | - | LPM | 1001 000d dddd 0101 | Rd, Z+ | LPM_Z_incr | - | - | - | LSL | 0000 11dd dddd dddd | Rd | AND | * | * | * | LSR | 1001 010d dddd 0110 | Rd | LSR | * | * | * | MOV | 0010 11rd dddd rrrr | Rd, Rr | MOV | * | * | * | MOVW | 0000 0001 dddd rrrr | Rd, Rr | MOVW | - | - | - | MUL | 1001 11rd dddd rrrr | Rd, Rr | MUL | - | - | - | MULS | 0000 0010 dddd rrrr | Rd, Rr | MULS | - | - | - | MULSU | 0000 0011 dddd rrrr | Rd, Rr | MULSU | - | - | - | NEG | 1001 010d dddd 0001 | Rd | NEG | * | * | * | NOP | 0000 0000 0000 0000 | | NOP | * | * | * | OR | 0010 10rd dddd rrrr | Rd, Rr | OR | * | * | * | ORI | 0110 KKKK dddd KKKK | Rd, K | ORI | * | * | * | OUT | 1011 1AAd dddd AAAA | A, Rd | OUT | * | * | * | POP | 1001 000d dddd 1111 | Rd | POP | - | * | * | PUSH | 1001 001d dddd 1111 | Rd | PUSH | - | * | * | RCALL | 1101 kkkk kkkk kkkk | k | RCALL | * | * | * | RET | 1001 0101 0000 1000 | | RET | * | * | * | RETI | 1001 0101 0001 1000 | | RETI | * | * | * | RJMP | 1100 kkkk kkkk kkkk | k | RJMP | * | * | * | ROL | 0001 11dd dddd dddd | Rd | ADC | * | * | * | ROR | 1001 010d dddd 0111 | Rd | ROR | * | * | * | SBC | 0000 10rd dddd rrrr | Rd, Rr | SBC | * | * | * | SBCI | 0100 KKKK dddd KKKK | Rd, K | SBCI | * | * | * | SBI | 1001 1010 AAAA Abbb | A, b | SBI | * | * | * | SBIC | 1001 1001 AAAA Abbb | A, b | SBIC | * | * | * | SBIS | 1001 1011 AAAA Abbb | A, b | SBIS | * | * | * | SBIW | 1001 0111 KKdd KKKK | Rd, K | SBIW | - | - | - | SBR | 0110 KKKK dddd KKKK | Rd, K | SBR | * | * | * | SBRC | 1111 110d dddd 0bbb | Rd, b | SBRC | * | * | * | SBRS | 1111 111d dddd 0bbb | Rd, b | SBRS | * | * | * | SEC | 1001 0100 0000 1000 | | SEC | * | * | * | SEH | 1001 0100 0101 1000 | | SEH | * | * | * | SEI | 1001 0100 0111 1000 | | SEI | * | * | * | SEN | 1001 0100 0010 1000 | | SEN | * | * | * | SER | 1110 1111 dddd 1111 | Rd | LDI | * | * | * | SES | 1001 0100 0100 1000 | | SES | * | * | * | SET | 1001 0100 0110 1000 | | SET | * | * | * | SEV | 1001 0100 0011 1000 | | SEV | * | * | * | SEZ | 1001 0100 0001 1000 | | SEZ | * | * | * | SLEEP | 1001 0101 1000 1000 | | SLEEP | * | * | * | SPM | 1001 0101 1110 1000 | | SPM | - | - | - | ST | 1001 001d dddd 1101 | X+, Rd | ST_X_incr | - | * | * | ST | 1001 001d dddd 1100 | X, Rd | ST_X | - | * | * | ST | 1001 001d dddd 1001 | Y+, Rd | ST_Y_incr | - | * | * | ST | 1000 001d dddd 1000 | Y, Rd | STD_Y | - | * | * | ST | 1001 001d dddd 0001 | Z+, Rd | ST_Z_incr | - | * | * | ST | 1000 001d dddd 0000 | Z, Rd | STD_Z | * | * | * | ST | 1001 001d dddd 1110 |-X, Rd | ST_X_decr | - | * | * | ST | 1001 001d dddd 1010 |-Y, Rd | ST_Y_decr | - | * | * | ST | 1001 001d dddd 0010 |-Z, Rd | ST_Z_decr | - | * | * | STD | 10q0 qq1d dddd 1qqq | Y+q, Rd | STD_Y | - | * | * | STD | 10q0 qq1d dddd 0qqq | Z+q, Rd | STD_Z | - | * | * | STS | 1001 001d dddd 0000 | k, Rd | STS | - | * | * | | kkkk kkkk kkkk kkkk | | | | | | SUB | 0001 10rd dddd rrrr | Rd, Rr | SUB | * | * | * | SUBI | 0101 KKKK dddd KKKK | Rd, K | SUBI | * | * | * | SWAP | 1001 010d dddd 0010 | Rd | SWAP | * | * | * | TST | 0010 00dd dddd dddd | Rd | AND | * | * | * | WDR | 1001 0101 1010 1000 | | WDR | * | * | * |