#
# $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         |   *  |   *  |   *  |
