Data Transfer

InstructionOperandsDescriptionOperation
movRd, RrMove Rr to RdRd = Rr
ldiRd, KLoad K in RdRd = k
Rd must be from R16 to R31
ldRd, XLoad (X) in RdRd = *X
Rd, X+Load (X) in Rd, X is incrementedRd = *X, X++
Rd, -XX is decremented, Load ( X ) in Rd--X, Rd = X
All three registers can be used
lddRd, Y+qRd is loaded with (Y + q)Rd = *(Y + q)
Register Z can also be usedRegister X cannot be used.q has to be between 0 and 63
ldsRd, kLoad Rd with data in position k in memory.Rd = *k
stX, RrStore Rr in (X)*X = Rr
X+, RdStore Rr in (X), X is incremented*X = Rr, X++
-X, RdX is decremented, Store Rr in ( X )X--, *X = Rr
All three registers can be used
stdY+q, Rr stores Rr*(Y + q) = Rr
Register Z can also be used.Register X cannot be used.q has to be between 0 and 63
stsk, RrStore Rr in position k in memory.*(k) = Rr
pushRrPush Rr to stackSP--, *SP = Rr
popRdPop Rd from stackRd = *SP, SP++

Arithmetic

InstructionOperandsDescriptionOperation
addRd, RrAdd Rr to RdRd += Rr
subRd, RrSubtract Rr from RdRd -= Rr
subiRd, KSubtract K from RdRd -= k
incRdIncrement RdRd++
decRdDecrement RdRd--
negRdChange sign of RdRd = -Rd
mulRd, RrUnsigned multiplyR1:R0 = Rd * Rr

Bitwise

InstructionOperandsDescriptionOperation
andRd, RrConjunction of Rd and RrRd = Rd & Rr
orRd, RrDisjunction of Rd and RrRd = Rd | Rr
eorRd, Rrexclusive or of Rd and RrRd = Rd ^ Rr
lsl/lsrRdShift left/rightShift into C flag
rol/rorRdRotate left/rightRotate with C flag
asrRdArithmetic shift rightSign extended shift

Compare

InstructionOperandsDescriptionOperation
cpRd, RrSubtract and update flagsRD - Rr
cpiRd, KSubtract K and update flagsRd - K
Rd must be from R16 to R31K must be between 0 and 255

Jump and Branching

MnemonicOperandsDescriptionOperation
jmpkunconditional jump
breq/brnekBranch if equal/ not equalIf Z=1 (or Z=0)
then PC = PC + k + 1
otherwise PC += 1
brsh/brlokBranch if same or higher/lower (unsigned)If C=1 (or C=0)
then PC = PC + k + 1
otherwise PC += 1
brge/brltkBranch if greater or equal/lower (signed)If S=1 (or S=0)
then PC = PC + k + 1
otherwise PC += 1

Call and Return

MnemonicOperandsDescriptionOperation
callkCall subroutine in position kPC = k, SP -= 2, *SP = PC + 2
retReturnPC = *SP, SP += 2

Input & Output

MnemonicOperandsDescriptionOperation
inRd, ALoad I/O data from address A to register RdRd = I/O[A]
outA, RdStore value in register Rd in I/O address AI/O[A] = Rd