Atmel-AVR Assemblermodul

Assembler-Optionen
Die Prozessordefinitions-Datei ASS_AVR.PRC

Befehlsreferenz
Fehlermeldungen


Assembler-Optionen

Im Einstellungsdialog stehen folgende Optionen zur Verfügung:

Prozessor
Wählen Sie hier den verwendeten Prozessor aus der Atmel AVR-Serie aus

Vordefinierte Labels für I/O-Register etc.
Wenn ausgewählt, werden für die beim jeweiligen Prozessortyp vorhandenen I/O-Register sowie ROM-, RAM-, EEPROM-Größe und Interrupt-Vektoradressen Labels vordefiniert. Die verwendeten Namen entsprechen den in den von Atmel gelieferten Include-Dateien verwendeten.

Vordefinierte Labels für I/O-Register-Bits
Wenn ausgewählt, werden für die beim jeweiligen Prozessortyp vorhandenen I/O-Register-Bitpositionen Labels vordefiniert. Die verwendeten Namen entsprechen den in den von Atmel gelieferten Include-Dateien verwendeten.

Vordefinierte Labels für SREG-Flags
Wenn ausgewählt, werden für die Bitpositionen der Flags im Statusregister SREG Labels vordefiniert, im Einzelnen: I=7, T=6, H=5, S=4, V=3, N=2, Z=1, C=0.


Die Prozessordefinitions-Datei ASS_AVR.PRC

Die Prozessordefinitions-Datei ersetzt die bei anderen Assemblern üblichen Include-Dateien zur Definition der prozessorspezifischen I/O-Register etc. Die Datei ist wie folgt aufgebaut:

Section [DEVICES]
Hier werden die definierten Prozessortypen aufgelistet. Format:
<Kurzname>=<Lesbarer Name>
Der Kurzname wird in der .PRC-Datei weiterverwendet; der lesbare Name wird im Auswahldialog angezeigt. Für jeden definierten Prozessor muß eine

Section [Kurzname]
folgen. Diese Section muß fünf Einträge enthalten:
ROMWordSize=<Größe des ROMs in Worten>
UndefinedCMDS=<Liste der nicht definierten Befehle>
Siehe hierzu weiter unten.
IOLabels=<Name der Section, in der die I/O-Labels definiert werden>
I/O-Labels werden bei der Syntaxhervorhebung als Register gewertet.
IOBitLabels=<Name der Section, in der die I/O-Einzelbit-Labels definiert werden>
OtherLabels=<Name der Section, in der die sonstigen Labels (z.B. IRQ-Vektoren, ROM und RAM-Größe...) definiert werden>

Die Liste der undefinierten Befehle setzt sich aus einer durch Kommata getrennten Aufzählung zusammen. Folgende Zahlen müssen für die nicht definierten Befehle aufgelistet werden:
ADC=1, ADD=2, ADIW=3, AND=4, ANDI=5, ASR=6, BCLR=7, BLD=8, BRBC=9, BRBS=10, BRCC=11, BRCS=12, BREQ=13, BRGE=14, BRHC=15, BRHS=16, BRID=17, BRIE=18, BRLO=19, BRLT=20, BRMI=21, BRNE=22, BRPL=23, BRSH=24, BRTC=25, BRTS=26, BRVC=27, BRVS=28, BSET=29, BST=30, CALL=31, CBI=32, CBR=33, CLC=34, CLH=35, CLI=36, CLN=37, CLR=38, CLS=39, CLT=40, CLV=41, CLZ=42, COM=43, CP=44, CPC=45, CPI=46, CPSE=47, DEC=48, EICALL=49, EIJMP=50, ELPM=51, EOR=52, FMUL=53, FMULS=54, FMULSU=55, ICALL=56, IJMP=57, IN=58, INC=59, JMP=60, LD=61, LDD=62, LDI=63, LDS=64, LPM=65, LSL=66, LSR=67, MOV=68, MOVW=69, MUL=70, MULS=71, MULSU=72, NEG=73, NOP=74, OR=75, ORI=76, OUT=77, POP=78, PUSH=79, RCALL=80, RET=81, RETI=82, RJMP=83, ROL=84, ROR=85, SBC=86, SBCI=87, SBI=88, SBIC=89, SBIS=90, SBIW=91, SBR=92, SBRC=93, SBRS=94, SEC=95, SEH=96, SEI=97, SEN=98, SER=99, SES=100, SET=101, SEV=102, SEZ=103, SLEEP=104, SPM=105, ST=106, STD=107, STS=108, SUB=109, SUBI=110, SWAP=111, TST=112, WDR=113

Einige Befehle haben verschiedene Ebenen der Implementierung:
nur LD Rd,Z: 62a
nur ST Z,Rd: 107a
nur LPM: 66a
nur LPM; LPM Rd,Z: 66b
nur LPM, LPM Rd,Z, LPM Rd,Z+: 66c
nur ELPM: 51a
nur ELPM; ELPM Rd,Z: 51b
nur ELPM, ELPM Rd,Z, ELPM Rd,Z+: 51c

Section [<Labeldefinitionen>]
Hier stehen Zuweisungen in der Form
<Labelname>=<Wert>
<Wert> kan eine Zahl in dezimaler (1234) oder hexadezimaler ($12CD) Schreibweise sein.


Atmel AVR Befehlsreferenz

Arithmetische und logische Befehle
Befehle zum Datentransfer
Befehle zur Bitmanipulation
Sprungbefehle
Sonstige Befehle


Arithmetische und logische Befehle

ADC Addition mit Übertrag
ADDAddition ohne Übertrag
SBCSubtraktion mit Übertrag
SUBSubtraktion ohne Übertrag
SBCISubtraktion von Konstante mit Übertrag
SUBISubtraktion von Konstante ohne Übertrag
ADIWAddition von Konstante zu Word
SBIWSubtraktion von Konstante von Word
MULvorzeichenlose Multiplikation
MULSMultiplikation mit Vorzeichen
MULSUgemischte Multiplikation
FMULvorzeichenlose Festkomma-Multiplikation
FMULSFestkomma-Multiplikation mit Vorzeichen
FMULSUgemischte Festkomma-Multiplikation

ANDLogisches UND
ANDILogisches UND mit Konstante
ORLogisches ODER
ORILogisches ODER mit Konstante
EORLogisches Exklusiv-ODER
COMEinerkomplement
NEGZweierkomplement

CPVergleiche
CPCVergleiche mit Übertrag
CPIVergleiche mit Konstante
TSTTest auf Null oder Minus

DECDekrementieren
INCInkrementieren
CLRRegister löschen
SERRegister auf FFh setzen



Befehle zum Datentransfer

MOV Kopiere Register
MOVWKopiere Registerpaar

LDILade Konstante
LDSLade aus Datenspeicher
LDLade indirekt aus Datenspeicher
LDDLade indirekt mit Offset aus Datenspeicher
STSSpeichere in Datenspeicher
STSpeichere indirekt in Datenspeicher
STDSpeichere indirekt mit Offset in Datenspeicher

LPMLade aus Programmspeicher
ELPMErweitertes Laden aus Programmspeicher
SPMSchreibe in Programmspeicher

INLese I/O-Adresse
OUTSchreibe auf I/O-Adresse
PUSHLege Register auf Stack
POPHole Register vom Stack



Sprungbefehle

JMP Sprung
RJMPRelativer Sprung
IJMPIndirekter Sprung
EIJMPErweiterter indirekter Sprung

CALLUnterprogrammaufruf
RCALLRelativer Unterprogrammaufruf
ICALLIndirekter Unterprogrammaufruf
EICALLErweiterter indirekter Unterprogrammaufruf
RETRückkehr aus Unterprogramm
RETIRückkehr aus Interrupt-Routine

CPSEVergleich, überspringe wenn gleich
SBRCÜberspringe, wenn Register-Bit gelöscht
SBRSÜberspringe, wenn Register-Bit gesetzt
SBRCÜberspringe, wenn I/O-Bit gelöscht
SBRSÜberspringe, wenn I/O-Bit gesetzt

BRBSSpringe, wenn Flag in SREG gesetzt
BRBCSpringe, wenn Flag in SREG gelöscht
BREQSpringe, wenn gleich
BRNESpringe, wenn ungleich
BRCSSpringe, wenn Übertrag
BRCCSpringe, wenn kein Übertrag
BRLOSpringe, wenn kleiner
BRSHSpringe, wenn größer oder gleich
BRMISpringe, wenn negativ
BRPLSpringe, wenn positiv
BRLTSpringe, wenn kleiner, mit Vorzeichen
BRGESpringe, wenn größer oder gleich, mit Vorzeichen
BRHSSpringe, wenn H=1
BRHCSpringe, wenn H=0
BRTSSpringe, wenn T=1
BRTCSpringe, wenn T=0
BRVSSpringe, wenn Überlauf
BRVCSpringe, wenn kein Überlauf
BRIESpringe, wenn Interrupts freigegeben
BRIDSpringe, wenn Interrupts gesperrt



Befehle zur Bitmanipulation

LSL Logisches Linksschieben
LSRLogisches Rechtsschieben
ASRArithmetisches Rechtsschieben
ROLLinksrotation
RORRechtsrotation
SWAPHalbbytes vertauschen

BLDBit laden aus T-Flag
BSTBit speichern in T-Flag
CBRBit löschen in Register
SBRBit setzen in Register
CBIBit löschen in I/O-Register
SBIBit setzen in I/O-Register
BCLRFlag in SREG löschen
BSETFlag in SREG setzen
CLCCarry-Flag löschen
SECCarry-Flag setzen
CLNNegative-Flag löschen
SENNegative-Flag setzen
CLZZero-Flag löschen
SEZZero-Flag setzen
CLIInterrupts sperren
SEIInterrupts freigeben
CLSSign-Flag löschen
SESSign-Flag setzen
CLVZweierkomplements-Überlauf-Flag V löschen
SEVZweierkomplements-Überlauf-Flag V setzen
CLTT-Flag löschen
SETT-Flag setzen
CLHHalf-Carry-Flag löschen
SEHHalf-Carry-Flag setzen



Sonstige Befehle

NOP keine Operation
SLEEPRuhezustand
WDRWatchdog zurücksetzen



ADC Rd,Rr

Beschreibung: Addiert zwei Register mit Übertrag und schreibt das Ergebnis ins Register Rd.

Funktion:Rd := Rd + Rr + C

Format:0£d£31, 0£r£31

Zyklen:1

Flags:
Hgesetzt bei Übertrag von Bit 3
S= N Å V
VZweierkomplement-Überlauf
N= MSB des Ergebnisses
Zgesetzt, falls Ergebnis = 0
CÜbertrag von MSB des Ergebnisses

Siehe auch:Die Befehle ADD, SBC
Befehlsreferenz



ADD Rd,Rr

Beschreibung: Addiert zwei Register ohne Übertrag und schreibt das Ergebnis ins Register Rd.

Funktion:Rd := Rd + Rr

Format:0£d£31, 0£r£31

Zyklen:1

Flags:
Hgesetzt bei Übertrag von Bit 3
S= N Å V
VZweierkomplement-Überlauf
N= MSB des Ergebnisses
Zgesetzt, falls Ergebnis = 0
CÜbertrag von MSB des Ergebnisses

Siehe auch:Die Befehle ADC, SUB, ADIW
Befehlsreferenz



ADIW Rd,K

Beschreibung: Addiert die direkten Daten K zum Registerpaar Rd+1:Rd.

Funktion:Rd+1:Rd := Rd+1:Rd + K

Format:d Î {24,26,28,30}, 0£K£63

Zyklen:2

Flags:
S= N Å V
VZweierkomplement-Überlauf
N= MSB des Ergebnisses
Zgesetzt, falls Ergebnis = 0
CÜbertrag von MSB des Ergebnisses

Siehe auch:Die Befehle ADD, SBIW
Befehlsreferenz



AND Rd,Rr

Beschreibung: Führt logische UND-Verknüpfung zwischen Rd und Rr aus und schreibt das Ergebnis ins Register Rd.

Funktion:Rd := Rd Ù Rr

Format:0£d£31, 0£r£31

Zyklen:1

Flags:
S= N Å V
V= 0
N= MSB des Ergebnisses
Zgesetzt, falls Ergebnis = 0

Siehe auch:Die Befehle ANDI, OR, EOR, TST
Befehlsreferenz



ANDI Rd,K

Beschreibung: Führt logische UND-Verknüpfung zwischen Rd und direkten Daten K aus und schreibt das Ergebnis ins Register Rd.

Funktion:Rd := Rd Ù K

Format:16£d£31, 0£K£255

Zyklen:1

Flags:
S= N Å V
V= 0
N= MSB des Ergebnisses
Zgesetzt, falls Ergebnis = 0

Siehe auch:Die Befehle AND, ORI, CBR
Befehlsreferenz



ASR Rd

Beschreibung: Führt arithmetisches Rechts- Schieben des Registers Rd durch. Bit 0 wandert ins Carry-Flag und Bit 7 bleibt unverändert.

Funktion:C := Rd[0]
Rd[0...6] := Rd[1...7]

Format:0£d£31

Zyklen:1

Flags:
S= N Å V
V= N Å C
N= Rd[7]
Zgesetzt, falls Ergebnis = 0
C= Rd[0]

Siehe auch:Die Befehle LSR, LSL, ROR
Befehlsreferenz



BCLR s

Beschreibung: Löscht das angegebene Bit im Status-Register.

Funktion:SREG[s] := 0

Format:0£s£7
s Î {C,Z,N,V,S,H,T,I} falls SREG-Flags definiert

Bemerkungen:Für die einzelnen Flags stehen auch vordefinierte Befehle bereit:
CLCC := 0
CLHH := 0
CLII := 0
CLNN := 0
CLSS := 0
CLTT := 0
CLVV := 0
CLZZ := 0

Zyklen:1

Flags:SREG[s] := 0

Siehe auch:Die Befehle BSET, CBI, SBI
Befehlsreferenz



BLD Rd,b

Beschreibung: Kopiert das T-Flag im Status-Register SREG ins Bit b des Registers Rd.

Funktion:Rd[b] := T

Format:0£d£31
0£b£7

Zyklen:1

Flags:kein Einfluß

Siehe auch:Die Befehle BST, MOV
Befehlsreferenz



BRBC s,k

Beschreibung: Führt einen Sprung relativ zum aktuellen PC aus, wenn das angegebene Bit b im Statusregister SREG gelöscht ist. Der Assembler berechnet aus der angegebenen Zieladresse automatisch die erforderliche Sprungdistanz k.

Funktion:IF SREG[s]=0 THEN
  PC := PC + k + 1
ELSE
  PC := PC + 1

Format:0£s£7
s Î {C,Z,N,V,S,H,T,I} falls SREG-Flags definiert
-64£k£+63

Bemerkungen:Für die einzelnen Flags stehen auch vordefinierte Befehle bereit:
BefehlBedingungSpringe, wenn
BRCCC=0kein Übertrag
BRGES=0größer oder gleich (mit Vorzeichen)
BRHCH=0kein Übertrag von Bit 3
BRIDI=0Interrupts gesperrt
BRNEZ=0nicht gleich
BRPLN=0positiv
BRSHC=0größer oder gleich
BRTCT=0T = 0
BRVCV=0kein Überlauf

Zyklen:1 wenn Bedingung nicht erfüllt
2 wenn Bedingung erfüllt

Flags:kein Einfluß

Siehe auch:Die Befehle BRBS, RJMP, CPSE, SBRC, SBRS, SBIC, SBIS
Befehlsreferenz



BRBS s,k

Beschreibung: Führt einen Sprung relativ zum aktuellen PC aus, wenn das angegebene Bit b im Statusregister SREG gesetzt ist. Der Assembler berechnet aus der angegebenen Zieladresse automatisch die erforderliche Sprungdistanz k.

Funktion:IF SREG[s]=1 THEN
  PC := PC + k + 1
ELSE
  PC := PC + 1

Format:0£s£7
s Î {C,Z,N,V,S,H,T,I} falls SREG-Flags definiert
-64£k£+63

Bemerkungen:Für die einzelnen Flags stehen auch vordefinierte Befehle bereit:
BefehlBedingungSpringe, wenn
BRCSC=1Übertrag
BREQZ=1gleich
BRHSH=1Übertrag von Bit 3
BRIEI=1Interrupts freigegeben
BRLOC=1kleiner
BRLTS=1kleiner (mit Vorzeichen)
BRMIN=1negativ
BRTST=1T = 1
BRVSV=1Überlauf

Zyklen:1 wenn Bedingung nicht erfüllt
2 wenn Bedingung erfüllt

Flags:kein Einfluß

Siehe auch:Die Befehle BRBC, RJMP, CPSE, SBRC, SBRS, SBIC, SBIS
Befehlsreferenz



BSET s

Beschreibung: Setzt das angegebene Bit im Status-Register.

Funktion:SREG[s] := 1

Format:0£s£7
s Î {C,Z,N,V,S,H,T,I} falls SREG-Flags definiert

Bemerkungen:Für die einzelnen Flags stehen auch vordefinierte Befehle bereit:
SECC := 1
SEHH := 1
SEII := 1
SENN := 1
SESS := 1
SETT := 1
SEVV := 1
SEZZ := 1

Zyklen:1

Flags:SREG[s] := 1

Siehe auch:Die Befehle BCLR, SBI, CBI
Befehlsreferenz



BST Rr,b

Beschreibung: Kopiert das Bit b des Registers Rr ins T-Flag im Status-Register SREG.

Funktion:T := Rr[b]

Format:0£d£31
0£b£7

Zyklen:1

Flags:kein Einfluß

Siehe auch:Die Befehle BLD, MOV
Befehlsreferenz



CALL k

Beschreibung: Ruft das Unterprogramm an der absoluten Adresse k auf. Die Rücksprungadresse wird auf dem Stack gesichert.

Funktion:Prozessoren mit
16-Bit PC22-Bit PC
(SP) := PC+2(SP) := PC+2
SP := SP+2SP := SP+3
PC := kPC := k

Format:Prozessoren mit
16-Bit PC22-Bit PC
0£k<64K0£k<4M

Zyklen:Prozessoren mit
16-Bit PC22-Bit PC
45

Flags:kein Einfluß

Siehe auch:Die Befehle RET, RCALL, ICALL, EICALL, JMP
Befehlsreferenz



CBI A,b

Beschreibung: Löscht das angegebene Bit b im I/O-Register A.

Funktion:I/O[A][b] := 0

Format:0£A£31, 0£b£7

Zyklen:2

Flags:kein Einfluß

Siehe auch:Die Befehle SBI, IN, OUT, BCLR, BSET
Befehlsreferenz



CBR Rd,K

Beschreibung: Löscht die durch die Bit-Maske K angegebenen Bits im Register Rd. Achtung, K gibt nicht die Bit-Nummer, sondern eine Bit-Maske an!

Funktion:Rd := Rd Ù (FFh-K)

Format:16£d£31, 0£K£255

Zyklen:1

Flags:
S= N Å V
V= 0
N= MSB des Ergebnisses
Zgesetzt, falls Ergebnis = 0

Siehe auch:Die Befehle ANDI, SBR, ORI
Befehlsreferenz



CLR Rd

Beschreibung: Löscht das Register Rd, indem das Register mit sich selbst logisch EXKLUSIV-ODER verknüpft wird.

Funktion:Rd := Rd Å Rd = 0

Format:0£d£31

Zyklen:1

Flags:
S= 0
V= 0
N= 0
Z= 1

Siehe auch:Die Befehle SER, EOR
Befehlsreferenz



COM Rd

Beschreibung: Bildet das Einerkomplement des Registers Rd.

Funktion:Rd := FFh - Rd

Format:0£d£31

Zyklen:1

Flags:
S= N Å V
V= 0
N= MSB des Ergebnisses
Zgesetzt, falls Ergebnis = 0
C= 1

Siehe auch:Die Befehle NEG, SUBI
Befehlsreferenz



CP Rd,Rr

Beschreibung: Vergleicht die Register Rd und Rr, d.h. führt eine Subtraktion durch. Keines der Register wird verändert, lediglich die Flags im Statusregister werden angepaßt, so daß die bedingten Sprungbefehle verwendet werden können.

Funktion:Rd - Rr

Format:0£d£31, 0£r£31

Zyklen:1

Flags:
Hgesetzt bei Übertrag von Bit 3
S= N Å V
VZweierkomplement-Überlauf
N= MSB des Ergebnisses
Zgesetzt, falls Ergebnis = 0 (Rd=Rr)
CÜbertrag von MSB des Ergebnisses (|Rr|>|Rd|)

Siehe auch:Die Befehle CPC, CPI, SUB
Befehlsreferenz



CPI Rd,K

Beschreibung: Vergleicht das Register Rd und die Konstante K, d.h. führt eine Subtraktion durch. Das Register wird nicht verändert, lediglich die Flags im Statusregister werden angepaßt, so daß die bedingten Sprungbefehle verwendet werden können.

Funktion:Rd - K

Format:16£d£31, 0£K£255

Zyklen:1

Flags:
Hgesetzt bei Übertrag von Bit 3
S= N Å V
VZweierkomplement-Überlauf
N= MSB des Ergebnisses
Zgesetzt, falls Ergebnis = 0 (Rd=K)
CÜbertrag von MSB des Ergebnisses (|K|>|Rd|)

Siehe auch:Die Befehle CP, CPC, SUBI
Befehlsreferenz



CPC Rd,Rr

Beschreibung: Vergleicht die Register Rd und Rr unter Berücksichtiigung des Carry-Flags, d.h. führt eine Subtraktion mit Übertrag durch. Keines der Register wird verändert, lediglich die Flags im Statusregister werden angepaßt, so daß die bedingten Sprungbefehle verwendet werden können.

Funktion:Rd - Rr - C

Format:0£d£31, 0£r£31

Zyklen:1

Flags:
Hgesetzt bei Übertrag von Bit 3
S= N Å V
VZweierkomplement-Überlauf
N= MSB des Ergebnisses
Z= 0, falls Rd-Rr-C¹0, sonst unverändert
CÜbertrag von MSB des Ergebnisses (|Rr|+C>|Rd|)

Siehe auch:Die Befehle CP, CPI, SBCI
Befehlsreferenz



CPSE Rd,Rr

Beschreibung: Vergleicht die Register Rd und Rr und überspringt die nachfolgende Anweisung, wenn Rd=Rr.

Funktion:IF Rd=Rr THEN
  PC := PC + 2 (1-Wort-Anweisung folgt)
  PC := PC + 3 (2-Wort-Anweisung folgt)
ELSE
  PC := PC + 1

Format:0£d£31, 0£r£31

Zyklen:1 wenn Bedingung nicht erfüllt
2/3 wenn Bedingung erfüllt

Flags:kein Einfluß

Siehe auch:Die Befehle BRBS, BRBC, CP, SBRC, SBRS, SBIC, SBIS
Befehlsreferenz



DEC Rd

Beschreibung: Vermindert das Register Rd um 1. Das Carry-Flag wird nicht verändert, auch nicht, wenn Rd vorher 0 war.

Funktion:Rd := Rd - 1

Format:0£d£31

Zyklen:1

Flags:
S= N Å V
Vgesetzt, falls vorher Rd=80h
N= MSB des Ergebnisses
Zgesetzt, falls Ergebnis = 0

Siehe auch:Der Befehl INC
Befehlsreferenz



EICALL

Beschreibung: Indirekter Unterprogrammaufruf - ruft das Unterprogramm an der absoluten Adresse, die durch das Z-Register sowie das EIND-Register gegeben ist, auf. Die Rücksprungadresse wird auf dem Stack gesichert.

Funktion:(SP) := PC + 1
SP := SP - 3
PC[15...0] := Z
PC[21...16] := EIND

Zyklen:4

Flags:kein Einfluß

Siehe auch:Die Befehle RET, CALL, ICALL, EIJMP, IJMP
Befehlsreferenz



EIJMP

Beschreibung: Indirekter Sprung - setzt die Programmausführung an der absoluten Adresse, die durch das Z-Register sowie das EIND-Register gegeben ist, fort.

Funktion:PC[15...0] := Z
PC[21...16] := EIND

Zyklen:2

Flags:kein Einfluß

Siehe auch:Die Befehle IJMP, EICALL, ICALL, JMP
Befehlsreferenz



ELPM [Rd,Z[+]]

Beschreibung: Lädt das Register Rd aus der durch das Z- und das RAMPZ-Register angegebenen Programmspeicher-Adresse. Hierbei entscheidet Z[0] darüber, ob das High- oder das Low-Byte des Speicherwortes adressiert wird. Wird Rd nicht angegeben, so wird R0 angenommen. Wird das Pluszeichen angeben, so wird nach dem Ladevorgang die Kombination aus RAMPZ- und Z- Register inkrementiert.
Nicht alle Parameter-Kombinationen sind bei jedem Prozessor zulässig.

Funktion:
(i)R0 := (RAMPZ:Z)
(ii)Rd := (RAMPZ:Z)
(iii)Rd := (RAMPZ:Z)
RAMPZ:Z := RAMPZ:Z + 1

Format:
(i)ELPM
(ii)ELPM Rd,Z (0£d£31)
(iii)ELPM Rd,Z+ (0£d£31)
Folgende Kombinationen sind undefiniert:
LPM R30,Z+
LPM R31,Z+

Zyklen:3

Flags:kein Einfluß

Siehe auch:Die Befehle LPM, SPM, LD
Befehlsreferenz



EOR Rd,Rr

Beschreibung: Führt logische EXKLUSIV-ODER-Verknüpfung zwischen Rd und Rr aus und schreibt das Ergebnis ins Register Rd.

Funktion:Rd := Rd Å Rr

Format:0£d£31, 0£r£31

Zyklen:1

Flags:
S= N Å V
V= 0
N= MSB des Ergebnisses
Zgesetzt, falls Ergebnis = 0

Siehe auch:Die Befehle OR, AND, CLR
Befehlsreferenz



FMUL Rd,Rr

Beschreibung: Führt eine Multiplikation zweier vorzeichenloser Festkomma-Zahlen in den Registern Rd und Rr durch. Rd und Rr enthalten Zahlen im Festkomma-Format 1.7, d.h. das Komma sitzt implizit zwischen Bit 7 und Bit 6. Die beiden Register werden multipliziert und das Ergebnis einmal links geschoben, so daß das Format 1.15 vorliegt (d.h. wieder 1.7 im High-Byte des Ergebnisses).

Funktion:R1:R0 := Rd ´ Rr

Format:16£d£23, 16£r£23
Rd und Rr enthalten vorzeichenlose Zahlen im 1.7-Format (d.h. 80h=10000000b entspricht +1,0)

Zyklen:2

Flags:
CÜberlauf
(= Bit 15 des Ergebnisses vor dem Schieben)
Zgesetzt, falls Ergebnis = 0

Siehe auch:Die Befehle FMULS, FMULSU, MUL
Befehlsreferenz



FMULS Rd,Rr

Beschreibung: Führt eine Multiplikation zweier vorzeichenbehafteter Festkomma-Zahlen in den Registern Rd und Rr durch. Rd und Rr enthalten Zahlen im Festkomma-Format 1.7, d.h. das Komma sitzt implizit zwischen Bit 7 und Bit 6. Die beiden Register werden multipliziert und das Ergebnis einmal links geschoben, so daß das Format 1.15 vorliegt (d.h. wieder 1.7 im High-Byte des Ergebnisses).

Funktion:R1:R0 := Rd ´ Rr

Format:16£d£23, 16£r£23
Rd und Rr enthalten vorzeichenbehaftete Zahlen im 1.7-Format (d.h. 80h=10000000b entspricht -1,0; 7Fh=01111111b entspricht +0,9921875)

Zyklen:2

Flags:
CÜberlauf
(= Bit 15 des Ergebnisses vor dem Schieben)
Zgesetzt, falls Ergebnis = 0

Siehe auch:Die Befehle FMUL, FMULSU, MULS
Befehlsreferenz



FMULSU Rd,Rr

Beschreibung: Führt eine Multiplikation einer vorzeichenbehafteten Festkomma-Zahl im Register Rd und einer vorzeichenlosen Festkomma-Zahl im Register Rr durch. Rd und Rr enthalten Zahlen im Festkomma-Format 1.7, d.h. das Komma sitzt implizit zwischen Bit 7 und Bit 6. Die beiden Register werden multipliziert und das Ergebnis einmal links geschoben, so daß das vorzeichenbehaftete Format 1.15 vorliegt (d.h. wieder 1.7 im High-Byte des Ergebnisses).

Funktion:R1:R0 := Rd ´ Rr

Format:16£d£23, 16£r£23
Rd enthält vorzeichenbehaftete Zahl im 1.7-Format (d.h. 80h=10000000b entspricht -1,0; 7Fh=01111111b entspricht +0,9921875)
Rr enthält vorzeichenlose Zahl im 1.7-Format (d.h. 80h=10000000b entspricht +1,0; FFh=11111111b entspricht +1,9921875)

Zyklen:2

Flags:
CÜberlauf
(= Bit 15 des Ergebnisses vor dem Schieben)
Zgesetzt, falls Ergebnis = 0

Siehe auch:Die Befehle FMUL, FMULS, MULSU
Befehlsreferenz



ICALL

Beschreibung: Indirekter Unterprogrammaufruf - ruft das Unterprogramm an der absoluten Adresse, die durch das Z-Register gegeben ist, auf. Die Rücksprungadresse wird auf dem Stack gesichert. Bei Prozessoren mit mehr als 64kWorten Programmspeicher können nur die unteren 64kWorte erreicht werden.

Funktion:(SP) := PC + 1
SP := SP - 2 (-3, wenn PC>16 Bit)
PC[15...0] := Z
PC[21...16] := 0 (wenn PC>16 Bit)

Zyklen:3 (4, wenn PC>16 Bit)

Flags:kein Einfluß

Siehe auch:Die Befehle RET, EICALL, CALL, IJMP, EIJMP
Befehlsreferenz



IJMP

Beschreibung: Indirekter Sprung - setzt die Programmausführung an der absoluten Adresse, die durch das Z-Register gegeben ist, fort. Bei Prozessoren mit mehr als 64kWorten Programmspeicher können nur die unteren 64kWorte erreicht werden.

Funktion:PC[15...0] := Z
PC[21...16] := 0 (wenn PC>16 Bit)

Zyklen:2

Flags:kein Einfluß

Siehe auch:Die Befehle EIJMP, JMP, ICALL, EICALL
Befehlsreferenz



IN Rd,A

Beschreibung: Lädt das Register Rd von der angegebenen I/O-Adresse A.

Funktion:Rd := I/O[A]

Format:0£d£31, 0£A£63

Zyklen:1

Flags:kein Einfluß

Siehe auch:Die Befehle OUT, CBI, SBI
Befehlsreferenz



INC Rd

Beschreibung: Erhöht das Register Rd um 1. Das Carry-Flag wird nicht verändert, auch nicht, wenn Rd vorher 255 war.

Funktion:Rd := Rd + 1

Format:0£d£31

Zyklen:1

Flags:
S= N Å V
Vgesetzt, falls vorher Rd=7Fh
N= MSB des Ergebnisses
Zgesetzt, falls Ergebnis = 0

Siehe auch:Der Befehl DEC
Befehlsreferenz



JMP k

Beschreibung: Setzt die Programmausführung an der absoluten Adresse k fort.

Funktion:PC := k

Format:0£k<4M

Zyklen:3

Flags:kein Einfluß

Siehe auch:Die Befehle RJMP, IJMP, EIJMP, CALL
Befehlsreferenz



LD Rd,[-][X|Y|Z][+]

Beschreibung: Lädt das Register Rd von der durch das angegebene Zeigerregister festgelegten Adresse und inkrementiert bzw. dekrementiert ggf. das Zeigerregister.

Format:
LD Rd,XLD Rd,YLD Rd,Z
LD Rd,X+LD Rd,Y+LD Rd,Z+
LD Rd,-XLD Rd,-YLD Rd,-Z

Siehe auch:Die Befehle LDD, ST, LDS, LDI, IN, MOV, LPM
Befehlsreferenz



LD Rd,X
LD Rd,Y
LD Rd,Z


Beschreibung: Lädt das Register Rd von der durch das Register X (bzw. Y oder Z) gegebenen Daten-Adresse. Der Daten-Adreßraum setzt sich aus den Registern, dem I/O-Adreßraum sowie dem internen und externen SRAM zusammen.
Hat der verwendete Prozessor mehr als 64k Adreßraum, so wird das angesprochene 64k-Segment durch das RAMPX, RAMPY bzw. RAMPZ-Register bestimmt.
Hat der Prozessor nicht mehr als 256 Bytes Daten-Adreßraum, so wird nur das untere Byte des Zeigerregisters X, Y oder Z ausgewertet.

Funktion:Rd := (X) (bzw. := (RAMPX:X))
Rd := (Y) (bzw. := (RAMPY:Y))
Rd := (Z) (bzw. := (RAMPZ:Z))

Format:0£d£31

Zyklen:2

Flags:kein Einfluß

Siehe auch:Die Befehle LD, LDD, LDS, ST, IN
Befehlsreferenz



LD Rd,X+
LD Rd,Y+
LD Rd,Z+


Beschreibung: Lädt das Register Rd von der durch das Register X (bzw. Y oder Z) gegebenen Daten-Adresse und inkrementiert danach das Zeigerregister X, Y oder Z. Der Daten-Adreßraum setzt sich aus den Registern, dem I/O-Adreßraum sowie dem internen und externen SRAM zusammen.
Hat der verwendete Prozessor mehr als 64k Adreßraum, so wird das angesprochene 64k-Segment durch das RAMPX, RAMPY bzw. RAMPZ-Register bestimmt. Beim Inkrementieren wird hier das RAMP-Register entsprechend mitverändert.
Hat der Prozessor nicht mehr als 256 Bytes Daten-Adreßraum, so wird nur das untere Byte des Zeigerregisters X, Y oder Z ausgewertet und inkrementiert.

Funktion:Rd := (X) (bzw. := (RAMPX:X))
X := X + 1 (bzw. RAMPX:X := RAMPX:X + 1)

Rd := (Y) (bzw. := (RAMPY:Y))
Y := Y + 1 (bzw. RAMPY:Y := RAMPY:Y + 1)

Rd := (Z) (bzw. := (RAMPZ:Z))
Z := Z + 1 (bzw. RAMPZ:Z := RAMPZ:Z + 1)

Format:0£d£31
Folgende Kombinationen sind undefiniert:
LD R26,X+
LD R27,X+
LD R28,Y+
LD R29,Y+
LD R30,Z+
LD R31,Z+

Zyklen:2

Flags:kein Einfluß

Siehe auch:Die Befehle LD, LDD, LDS, ST, IN
Befehlsreferenz



LD Rd,-X
LD Rd,-Y
LD Rd,-Z


Beschreibung: Dekrementiert das Zeigerregister X, Y oder Z und lädt danach das Register Rd von der durch das Register X (bzw. Y oder Z) gegebenen Daten-Adresse. Der Daten-Adreßraum setzt sich aus den Registern, dem I/O-Adreßraum sowie dem internen und externen SRAM zusammen.
Hat der verwendete Prozessor mehr als 64k Adreßraum, so wird das angesprochene 64k-Segment durch das RAMPX, RAMPY bzw. RAMPZ-Register bestimmt. Beim Dekrementieren wird hier das RAMP-Register entsprechend mitverändert.
Hat der Prozessor nicht mehr als 256 Bytes Daten-Adreßraum, so wird nur das untere Byte des Zeigerregisters X, Y oder Z ausgewertet und dekrementiert.

Funktion:X := X - 1 (bzw. RAMPX:X := RAMPX:X - 1)
Rd := (X) (bzw. := (RAMPX:X))

Y := Y - 1 (bzw. RAMPY:Y := RAMPY:Y - 1)
Rd := (Y) (bzw. := (RAMPY:Y))

Z := Z - 1 (bzw. RAMPZ:Z := RAMPZ:Z - 1)
Rd := (Z) (bzw. := (RAMPZ:Z))

Format:0£d£31
Folgende Kombinationen sind undefiniert:
LD R26,-X
LD R27,-X
LD R28,-Y
LD R29,-Y
LD R30,-Z
LD R31,-Z

Zyklen:2

Flags:kein Einfluß

Siehe auch:Die Befehle LD, LDD, LDS, ST, IN
Befehlsreferenz



LDD Rd,Y+q
LDD Rd,Z+q


Beschreibung: Lädt das Register Rd von der durch das Register Y (bzw. Z) plus dem Offset q gegebenen Daten-Adresse. Der Daten-Adreßraum setzt sich aus den Registern, dem I/O-Adreßraum sowie dem internen und externen SRAM zusammen.
Hat der verwendete Prozessor mehr als 64k Adreßraum, so wird das angesprochene 64k-Segment durch das RAMPX, RAMPY bzw. RAMPZ-Register bestimmt.
Hat der Prozessor nicht mehr als 256 Bytes Daten-Adreßraum, so wird nur das untere Byte des Zeigerregisters X, Y oder Z ausgewertet.

Funktion:Rd := (Y+q) (bzw. := (RAMPY:Y+q))
Rd := (Z+q) (bzw. := (RAMPZ:Z+q))

Format:0£d£31, 0£q£63,

Zyklen:2

Flags:kein Einfluß

Siehe auch:Die Befehle LD, STD, ST, IN
Befehlsreferenz



LDI Rd,K

Beschreibung: Lädt die Konstante K ins Register Rd.

Funktion:Rd := K

Format:16£d£31, 0£K£255

Zyklen:1

Flags:kein Einfluß

Siehe auch:Die Befehle MOV, LD, CLR, SER
Befehlsreferenz



LDS Rd,k

Beschreibung: Lädt das Register Rd von der Daten-Adresse k. Der Daten-Adreßraum setzt sich aus den Registern, dem I/O-Adreßraum sowie dem internen und externen SRAM zusammen.
Hat der verwendete Prozessor mehr als 64k Adreßraum, so wird das angesprochene 64k-Segment durch das RAMPD-Register bestimmt.

Funktion:Rd := (k) (bzw. := (RAMPD:k))

Format:0£d£31, 0£k£65535

Zyklen:2

Flags:kein Einfluß

Siehe auch:Die Befehle LD, LDD, STS, ST, IN
Befehlsreferenz



LPM [Rd,Z[+]]

Beschreibung: Lädt das Register Rd aus der durch das Z-Register angegebenen Programmspeicher-Adresse. Hierbei entscheidet Z[0] darüber, ob das High- oder das Low-Byte des Speicherwortes adressiert wird. Wird Rd nicht angegeben, so wird R0 angenommen. Wird das Pluszeichen angeben, so wird nach dem Ladevorgang die Kombination aus RAMPZ- und Z- Register inkrementiert.
Der Befehl spricht immer die unteren 64kBytes des Programmspeichers an
Nicht alle Parameter-Kombinationen sind bei jedem Prozessor zulässig.

Funktion:
(i)R0 := (Z)
(ii)Rd := (Z)
(iii)Rd := (Z)
Z := Z + 1

Format:
(i)LPM
(ii)LPM Rd,Z (0£d£31)
(iii)LPM Rd,Z+ (0£d£31)
Folgende Kombinationen sind undefiniert:
LPM R30,Z+
LPM R31,Z+

Zyklen:3

Flags:kein Einfluß

Siehe auch:Die Befehle ELPM, SPM, LD
Befehlsreferenz



LSL Rd

Beschreibung: Führt logisches Links- Schieben des Registers Rd durch. Bit 7 wandert ins Carry-Flag und eine 0 in Bit 0.

Funktion:C := Rd[7]
Rd[7...1] := Rd[6...0]
Rd[0] := 0

Format:0£d£31

Zyklen:1

Flags:
HRd[3] vor dem Schieben
S= N Å V
V= N Å C
N= 0
Zgesetzt, falls Ergebnis = 0
C= Rd[7]

Siehe auch:Die Befehle LSR, ROL
Befehlsreferenz



LSR Rd

Beschreibung: Führt logisches Rechts- Schieben des Registers Rd durch. Bit 0 wandert ins Carry-Flag und eine 0 in Bit 7.

Funktion:C := Rd[0]
Rd[0...6] := Rd[1...7]
Rd[7] := 0

Format:0£d£31

Zyklen:1

Flags:
S= N Å V
V= N Å C
N= 0
Zgesetzt, falls Ergebnis = 0
C= Rd[0]

Siehe auch:Die Befehle ASR, LSL, ROR
Befehlsreferenz



MOV Rd,Rr

Beschreibung: Lädt das Zielregister Rd aus dem Quellregister Rr.

Funktion:Rd := Rr

Format:0£d£31, 0£r£31

Zyklen:1

Flags:kein Einfluß

Siehe auch:Die Befehle MOVW, LD, ST
Befehlsreferenz



MOVW Rd,Rr

Beschreibung: Lädt das Zielregisterpaar Rd+1:Rd aus dem Quellregisterpaar Rr+1:Rr.

Funktion:Rd := Rr
Rd+1 := Rr+1

Format:d Î {0,2,4,...,30}, r Î {0,2,4,...,30}

Zyklen:1

Flags:kein Einfluß

Siehe auch:Die Befehle MOV, LD
Befehlsreferenz



MUL Rd,Rr

Beschreibung: Führt eine Multiplikation zweier vorzeichenloser Zahlen in den Registern Rd und Rr durch.

Funktion:R1:R0 := Rd ´ Rr

Format:0£d£31, 0£r£31
Rd und Rr enthalten vorzeichenlose ganze Zahlen (d.h. im Bereich 0...255)

Zyklen:2

Flags:
CÜberlauf (= Bit 15 des Ergebnisses)
Zgesetzt, falls Ergebnis = 0

Siehe auch:Die Befehle MULS, MULSU, FMUL
Befehlsreferenz



MULS Rd,Rr

Beschreibung: Führt eine Multiplikation zweier vorzeichenbehafteter Zahlen in den Registern Rd und Rr durch.

Funktion:R1:R0 := Rd ´ Rr

Format:0£d£31, 0£r£31
Rd und Rr enthalten vorzeichenbehaftete ganze Zahlen (d.h. im Bereich -128...+127)

Zyklen:2

Flags:
CÜberlauf (= Bit 15 des Ergebnisses)
Zgesetzt, falls Ergebnis = 0

Siehe auch:Die Befehle MUL, MULSU, FMULS
Befehlsreferenz



MULSU Rd,Rr

Beschreibung: Führt eine Multiplikation der vorzeichenbehafteten Zahl im Register Rd und der vorzeichenlosen Zahl im Register Rr durch.

Funktion:R1:R0 := Rd ´ Rr

Format:0£d£31, 0£r£31
Rd enthält vorzeichenbehaftete ganze Zahl (d.h. im Bereich -128...+127)
Rr enthält vorzeichenlose ganze Zahl (d.h. im Bereich 0...+255)

Zyklen:2

Flags:
CÜberlauf (= Bit 15 des Ergebnisses)
Zgesetzt, falls Ergebnis = 0

Siehe auch:Die Befehle MUL, MULS, FMULSU
Befehlsreferenz



NEG Rd

Beschreibung: Bildet das Zweierkomplement des Registers Rd (enthält Rd 80h, so bleibt Rd unverändert).

Funktion:Rd := 0 - Rd

Format:0£d£31

Zyklen:1

Flags:
HÜbertrag von Bit 3
S= N Å V
VZweierkomplement-Überlauf (Rd = 80h)
N= MSB des Ergebnisses
Zgesetzt, falls Ergebnis = 0
C= 1, außer wenn Rd = 0 nachher

Siehe auch:Die Befehle COM, SUBI
Befehlsreferenz



NOP

Beschreibung: Tut einen Zyklus lang nichts.

Funktion:-

Format:NOP

Zyklen:1

Flags:kein Einfluß

Siehe auch:Befehlsreferenz



OR Rd,Rr

Beschreibung: Führt logische ODER-Verknüpfung zwischen Rd und Rr aus und schreibt das Ergebnis ins Register Rd.

Funktion:Rd := Rd Ú Rr

Format:0£d£31, 0£r£31

Zyklen:1

Flags:
S= N Å V
V= 0
N= MSB des Ergebnisses
Zgesetzt, falls Ergebnis = 0

Siehe auch:Die Befehle ORI, AND, EOR
Befehlsreferenz



ORI Rd,K
SBR Rd,K


Beschreibung: Führt logische ODER-Verknüpfung zwischen Rd und direkten Daten K aus und schreibt das Ergebnis ins Register Rd. Mit anderen Worten: Setzt die durch die Bit-Maske K gegbenen Bits im Register Rd.

Funktion:Rd := Rd Ú K

Format:16£d£31, 0£K£255

Zyklen:1

Flags:
S= N Å V
V= 0
N= MSB des Ergebnisses
Zgesetzt, falls Ergebnis = 0

Siehe auch:Die Befehle ANDI, OR, CBR
Befehlsreferenz



OUT A,Rd

Beschreibung: Schreibt das Register Rd auf die angegebene I/O-Adresse A.

Funktion:I/O[A] := Rd

Format:0£d£31, 0£A£63

Zyklen:1

Flags:kein Einfluß

Siehe auch:Die Befehle IN, CBI, SBI
Befehlsreferenz



POP Rd

Beschreibung: Lädt das Register Rd vom Stack. Der Stackpointer wird vor dem Lesevorgang inkrementiert.

Funktion:SP := SP + 1
Rd := (SP)

Format:0£d£31

Zyklen:2

Flags:kein Einfluß

Siehe auch:Die Befehle PUSH, CALL, RET
Befehlsreferenz



PUSH Rd

Beschreibung: Legt das Register Rd auf den Stack. Der Stackpointer wird nach dem Schreibvorgang dekrementiert.

Funktion:(SP) := Rd
SP := SP - 1

Format:0£d£31

Zyklen:2

Flags:kein Einfluß

Siehe auch:Die Befehle POP, CALL
Befehlsreferenz



RCALL k

Beschreibung: Ruft ein Unterprogramm mit einem Sprung relativ zum aktuellen PC auf. Der Assembler berechnet aus der angegebenen Adresse automatisch den nötigen Offset k.
Bei Prozessoren mit nicht mehr als 8kByte Programmspeicher kann mit RCALL der gesamte Adreßraum erreicht werden.

Funktion:Prozessoren mit
16-Bit PC22-Bit PC
(SP) := PC+2(SP) := PC+2
SP := SP+2SP := SP+3
PC := PC + k + 1PC := PC + k + 1

Format:-2k£k<2k

Zyklen:Prozessoren mit
16-Bit PC22-Bit PC
34

Flags:kein Einfluß

Siehe auch:Die Befehle RET, CALL, ICALL, EICALL, RJMP
Befehlsreferenz



RET

Beschreibung: Rückkehr aus einem Unterprogramm. Die Rücksprungadresse wird vom Stack geholt.

Funktion:Prozessoren mit
16-Bit PC22-Bit PC
SP := SP + 2SP := SP + 3
PC := (SP)PC := (SP)

Format:RET

Zyklen:Prozessoren mit
16-Bit PC22-Bit PC
45

Flags:kein Einfluß

Siehe auch:Die Befehle RETI, CALL, RCALL, ICALL, EICALL, POP
Befehlsreferenz



RETI

Beschreibung: Rückkehr aus einer Interrupt-Routine. Die Rücksprungadresse wird vom Stack geholt und das Interrupt-Enable-Flag I gesetzt.

Funktion:Prozessoren mit
16-Bit PC22-Bit PC
SP := SP + 2SP := SP + 3
PC := (SP)PC := (SP)
I := 1I := 1

Format:RET

Zyklen:Prozessoren mit
16-Bit PC22-Bit PC
45

Flags:I := 1

Siehe auch:Die Befehle RET, CALL, RCALL, ICALL, EICALL, POP
Befehlsreferenz



RJMP k

Beschreibung: Führt einen Sprung relativ zum aktuellen PC aus. Der Assembler berechnet aus der angegebenen Adresse automatisch den nötigen Offset k.
Bei Prozessoren mit nicht mehr als 8kByte Programmspeicher kann mit RJMP der gesamte Adreßraum erreicht werden.

Funktion:PC := PC + k + 1

Format:-2k£k<2k

Zyklen:2

Flags:kein Einfluß

Siehe auch:Die Befehle RCALL, JMP, BRBC, BRBS, JMP
Befehlsreferenz



ROL Rd

Beschreibung: Führt eine Links-Rotation des Registers Rd durch das Carry-Flag C durch. Bit 7 wandert ins Carry-Flag und der Inhalt des Carry-Flags in Bit 0.

Funktion:tmp := C
C := Rd[7]
Rd[7...1] := Rd[6...0]
Rd[0] := tmp

Format:0£d£31

Zyklen:1

Flags:
H= Rd[3] vor dem Schieben
S= N Å V
V= N Å C
N= MSB des Ergebnisses
Zgesetzt, falls Ergebnis = 0
C= Rd[7] vor dem Schieben

Siehe auch:Die Befehle ROR, LSL
Befehlsreferenz



ROR Rd

Beschreibung: Führt eine Rechts-Rotation des Registers Rd durch das Carry-Flag C durch. Bit 0 wandert ins Carry-Flag und der Inhalt des Carry-Flags in Bit 7.

Funktion:tmp := C
C := Rd[0]
Rd[0...6] := Rd[1...7]
Rd[7] := tmp

Format:0£d£31

Zyklen:1

Flags:
S= N Å V
V= N Å C
N= MSB des Ergebnisses
Zgesetzt, falls Ergebnis = 0
C= Rd[0] vor dem Schieben

Siehe auch:Die Befehle ROL, LSR, ASR
Befehlsreferenz



SBC Rd,Rr

Beschreibung: Subtrahiert zwei Register mit Übertrag und schreibt das Ergebnis ins Register Rd.

Funktion:Rd := Rd - Rr - C

Format:0£d£31, 0£r£31

Zyklen:1

Flags:
Hgesetzt bei Übertrag von Bit 3
S= N Å V
VZweierkomplement-Überlauf
N= MSB des Ergebnisses
Zunverändert, falls Ergebnis = 0, sonst gelöscht
C= 1, wenn |Rr|+C>|Rd|

Siehe auch:Die Befehle SUB, ADC, SBCI
Befehlsreferenz



SBCI Rd,K

Beschreibung: Subtrahiert Konstante K mit Übertrag vom Register Rd und schreibt das Ergebnis ins Register Rd.

Funktion:Rd := Rd - K - C

Format:16£d£31, 0£K£255

Zyklen:1

Flags:
Hgesetzt bei Übertrag von Bit 3
S= N Å V
VZweierkomplement-Überlauf
N= MSB des Ergebnisses
Zunverändert, falls Ergebnis = 0, sonst gelöscht
C= 1, wenn |K|+C>|Rd|

Siehe auch:Die Befehle SBC, SUBI
Befehlsreferenz



SBI A,b

Beschreibung: Setzt das angegebene Bit b im I/O-Register A.

Funktion:I/O[A][b] := 1

Format:0£A£31, 0£b£7

Zyklen:2

Flags:kein Einfluß

Siehe auch:Die Befehle CBI, IN, OUT, BSET, BCLR
Befehlsreferenz



SBIC A,b

Beschreibung: Prüft Bit b der I/O-Adresse A und überspringt die nachfolgende Anweisung, wenn das Bit gelöscht ist.

Funktion:IF I/O[A][b]=0 THEN
  PC := PC + 2 (1-Wort-Anweisung folgt)
  PC := PC + 3 (2-Wort-Anweisung folgt)
ELSE
  PC := PC + 1

Format:0£A£31, 0£b£7

Zyklen:1 wenn Bedingung nicht erfüllt
2/3 wenn Bedingung erfüllt

Flags:kein Einfluß

Siehe auch:Die Befehle BRBS, BRBC, SBRC, SBRS, SBIS, CPSE
Befehlsreferenz



SBIS A,b

Beschreibung: Prüft Bit b der I/O-Adresse A und überspringt die nachfolgende Anweisung, wenn das Bit gesetzt ist.

Funktion:IF I/O[A][b]=1 THEN
  PC := PC + 2 (1-Wort-Anweisung folgt)
  PC := PC + 3 (2-Wort-Anweisung folgt)
ELSE
  PC := PC + 1

Format:0£A£31, 0£b£7

Zyklen:1 wenn Bedingung nicht erfüllt
2/3 wenn Bedingung erfüllt

Flags:kein Einfluß

Siehe auch:Die Befehle BRBS, BRBC, SBRC, SBRS, SBIC, CPSE
Befehlsreferenz



SBIW Rd,K

Beschreibung: Subtrahiert die direkten Daten K vom Registerpaar Rd+1:Rd.

Funktion:Rd+1:Rd := Rd+1:Rd - K

Format:d Î {24,26,28,30}, 0£K£63

Zyklen:2

Flags:
S= N Å V
VZweierkomplement-Überlauf
N= MSB des Ergebnisses
Zgesetzt, falls Ergebnis = 0
CÜbertrag von MSB des Ergebnisses

Siehe auch:Die Befehle SUBI, ADIW
Befehlsreferenz



SBRC Rr,b

Beschreibung: Prüft Bit b des Registers Rr und überspringt die nachfolgende Anweisung, wenn das Bit gelöscht ist.

Funktion:IF Rr[b]=0 THEN
  PC := PC + 2 (1-Wort-Anweisung folgt)
  PC := PC + 3 (2-Wort-Anweisung folgt)
ELSE
  PC := PC + 1

Format:0£r£31, 0£b£7

Zyklen:1 wenn Bedingung nicht erfüllt
2/3 wenn Bedingung erfüllt

Flags:kein Einfluß

Siehe auch:Die Befehle BRBS, BRBC, SBRS, SBIC, SBIS, CPSE
Befehlsreferenz



SBRS Rr,b

Beschreibung: Prüft Bit b des Registers Rr und überspringt die nachfolgende Anweisung, wenn das Bit gesetzt ist.

Funktion:IF Rr[b]=1 THEN
  PC := PC + 2 (1-Wort-Anweisung folgt)
  PC := PC + 3 (2-Wort-Anweisung folgt)
ELSE
  PC := PC + 1

Format:0£r£31, 0£b£7

Zyklen:1 wenn Bedingung nicht erfüllt
2/3 wenn Bedingung erfüllt

Flags:kein Einfluß

Siehe auch:Die Befehle BRBS, BRBC, SBRC, SBIC, SBIS, CPSE
Befehlsreferenz



SER Rd

Beschreibung: Setzt alle Bits im Register Rd, d.h. lädt die Konstante FFh ins Register Rd.

Funktion:Rd := 0FFh

Format:16£d£31

Zyklen:1

Flags:kein Einfluß

Siehe auch:Die Befehle LDI, CLR
Befehlsreferenz



SLEEP

Beschreibung: Versetzt den Prozessor in den Ruhezustand bzw. Sleep-Mode.

Funktion:siehe Datenblatt des jeweiligen Prozessors

Format:SLEEP

Zyklen:1

Flags:kein Einfluß

Siehe auch:Befehlsreferenz



SPM

Beschreibung: Dient zum Löschen und Beschreiben des Programmspeichers sowie dem Setzen der Bootloader-Bits. Details zur Funktionsweise finden sich im Datenblatt des jeweiligen Prozessors.

Funktion:Siehe Datenblatt

Format:SPM

Zyklen:abhängig von der ausgeführten Operation

Flags:kein Einfluß

Siehe auch:Die Befehle ELPM, LPM
Befehlsreferenz



ST [-][X|Y|Z][+],Rr

Beschreibung: Speichert das Register Rr an der durch das angegebene Zeigerregister festgelegten Adresse und inkrementiert bzw. dekrementiert ggf. das Zeigerregister.

Format:
ST X,RrST Y,RrST Z,Rr
ST X+,RrST Y+,RrST Z+,Rr
ST -X,RrST -Y,RrST -Z,Rr

Siehe auch:Die Befehle STD, LD, STS, OUT, MOV, SPM
Befehlsreferenz



ST X,Rr
ST Y,Rr
ST Z,Rr


Beschreibung: Speichert das Register Rr an der durch das Register X (bzw. Y oder Z) gegebenen Daten-Adresse. Der Daten-Adreßraum setzt sich aus den Registern, dem I/O-Adreßraum sowie dem internen und externen SRAM zusammen.
Hat der verwendete Prozessor mehr als 64k Adreßraum, so wird das angesprochene 64k-Segment durch das RAMPX, RAMPY bzw. RAMPZ-Register bestimmt.
Hat der Prozessor nicht mehr als 256 Bytes Daten-Adreßraum, so wird nur das untere Byte des Zeigerregisters X, Y oder Z ausgewertet.

Funktion:(X) := Rr (bzw. (RAMPX:X) := Rr)
(Y) := Rr (bzw. (RAMPY:Y) := Rr)
(Z) := Rr (bzw. (RAMPZ:Z) := Rr)

Format:0£r£31

Zyklen:2

Flags:kein Einfluß

Siehe auch:Die Befehle ST, STD, STS, LD, OUT
Befehlsreferenz



ST X+,Rr
ST Y+,Rr
ST Z+,Rr


Beschreibung: Speichert das Register Rr an der durch das Register X (bzw. Y oder Z) gegebenen Daten-Adresse und inkrementiert danach das Zeigerregister X, Y oder Z. Der Daten-Adreßraum setzt sich aus den Registern, dem I/O-Adreßraum sowie dem internen und externen SRAM zusammen.
Hat der verwendete Prozessor mehr als 64k Adreßraum, so wird das angesprochene 64k-Segment durch das RAMPX, RAMPY bzw. RAMPZ-Register bestimmt. Beim Inkrementieren wird hier das RAMP-Register entsprechend mitverändert.
Hat der Prozessor nicht mehr als 256 Bytes Daten-Adreßraum, so wird nur das untere Byte des Zeigerregisters X, Y oder Z ausgewertet und inkrementiert.

Funktion:(X) := Rr (bzw. (RAMPX:X) := Rr)
X := X + 1 (bzw. RAMPX:X := RAMPX:X + 1)

(Y) := Rr (bzw. (RAMPY:Y) := Rr)
Y := Y + 1 (bzw. RAMPY:Y := RAMPY:Y + 1)

(Z) := Rr (bzw. (RAMPZ:Z) := Rr)
Z := Z + 1 (bzw. RAMPZ:Z := RAMPZ:Z + 1)

Format:0£r£31
Folgende Kombinationen sind undefiniert:
ST X+,R26
ST X+,R27
ST Y+,R28
ST Y+,R29
ST Z+,R30
ST Z+,R31

Zyklen:2

Flags:kein Einfluß

Siehe auch:Die Befehle ST, STD, STS, LD, OUT
Befehlsreferenz



ST -X,Rr
ST -Y,Rr
ST -Z,Rr


Beschreibung: Dekrementiert das Zeigerregister X, Y oder Z und speichert danach das Register Rr an der durch das Register X (bzw. Y oder Z) gegebenen Daten-Adresse. Der Daten-Adreßraum setzt sich aus den Registern, dem I/O-Adreßraum sowie dem internen und externen SRAM zusammen.
Hat der verwendete Prozessor mehr als 64k Adreßraum, so wird das angesprochene 64k-Segment durch das RAMPX, RAMPY bzw. RAMPZ-Register bestimmt. Beim Dekrementieren wird hier das RAMP-Register entsprechend mitverändert.
Hat der Prozessor nicht mehr als 256 Bytes Daten-Adreßraum, so wird nur das untere Byte des Zeigerregisters X, Y oder Z ausgewertet und dekrementiert.

Funktion:X := X - 1 (bzw. RAMPX:X := RAMPX:X - 1)
(X) := Rr (bzw. (RAMPX:X) := Rr)

Y := Y - 1 (bzw. RAMPY:Y := RAMPY:Y - 1)
(Y) := Rr (bzw. (RAMPY:Y) := Rr)

Z := Z - 1 (bzw. RAMPZ:Z := RAMPZ:Z - 1)
(Z) := Rr (bzw. (RAMPZ:Z) := Rr)

Format:0£r£31
Folgende Kombinationen sind undefiniert:
ST -X,R26
ST -X,R27
ST -Y,R28
ST -Y,R29
ST -Z,R30
ST -Z,R31

Zyklen:2

Flags:kein Einfluß

Siehe auch:Die Befehle ST, STD, STS, LD, OUT
Befehlsreferenz



STD Y+q,Rr
STD Z+q,Rr


Beschreibung: Speichert das Register Rr von der durch das Register Y (bzw. Z) plus dem Offset q gegebenen Daten-Adresse. Der Daten-Adreßraum setzt sich aus den Registern, dem I/O-Adreßraum sowie dem internen und externen SRAM zusammen.
Hat der verwendete Prozessor mehr als 64k Adreßraum, so wird das angesprochene 64k-Segment durch das RAMPX, RAMPY bzw. RAMPZ-Register bestimmt.
Hat der Prozessor nicht mehr als 256 Bytes Daten-Adreßraum, so wird nur das untere Byte des Zeigerregisters X, Y oder Z ausgewertet.

Funktion:(Y+q) := Rr (bzw. (RAMPY:Y+q) := Rr)
(Z+q) := Rr (bzw. (RAMPZ:Z+q) := Rr)

Format:0£r£31, 0£q£63,

Zyklen:2

Flags:kein Einfluß

Siehe auch:Die Befehle ST, LDD, LD, OUT
Befehlsreferenz



STS k,Rr

Beschreibung: Speichert das Register Rr an der Daten-Adresse k. Der Daten-Adreßraum setzt sich aus den Registern, dem I/O-Adreßraum sowie dem internen und externen SRAM zusammen.
Hat der verwendete Prozessor mehr als 64k Adreßraum, so wird das angesprochene 64k-Segment durch das RAMPD-Register bestimmt.

Funktion:(k) :=Rr (bzw. (RAMPD:k) :=Rr)

Format:0£r£31, 0£k£65535

Zyklen:2

Flags:kein Einfluß

Siehe auch:Die Befehle ST, STD, LDS, LD, OUT
Befehlsreferenz



SUB Rd,Rr

Beschreibung: Subtrahiert zwei Register und schreibt das Ergebnis ins Register Rd.

Funktion:Rd := Rd - Rr

Format:0£d£31, 0£r£31

Zyklen:1

Flags:
Hgesetzt bei Übertrag von Bit 3
S= N Å V
VZweierkomplement-Überlauf
N= MSB des Ergebnisses
Zunverändert, falls Ergebnis = 0, sonst gelöscht
C= 1, wenn |Rr|+C>|Rd|

Siehe auch:Die Befehle SBC, ADD, SUBI
Befehlsreferenz



SUBI Rd,K

Beschreibung: Subtrahiert Konstante K vom Register Rd und schreibt das Ergebnis ins Register Rd.

Funktion:Rd := Rd - K

Format:16£d£31, 0£K£255

Zyklen:1

Flags:
Hgesetzt bei Übertrag von Bit 3
S= N Å V
VZweierkomplement-Überlauf
N= MSB des Ergebnisses
Zunverändert, falls Ergebnis = 0, sonst gelöscht
C= 1, wenn |K|>|Rd|

Siehe auch:Die Befehle SUB, SBCI, SBIW
Befehlsreferenz



SWAP Rd

Beschreibung: Vertauscht das obere und das untere Halbbyte (Nibble) im Register Rd.

Funktion:Rd[7...4] « Rd[3...0]

Format:0£d£31

Zyklen:1

Flags:kein Einfluß

Siehe auch:Der Befehl MOV
Befehlsreferenz



TST Rd

Beschreibung: Aktualisiert die Status-Flags in Bezug auf den Inhalt des Registers Rd, d.h. testet, ob der Inhalt Null oder negativ ist.
Tatsächlich wird das Register Rd mit sich selbst UND-verknüpft.

Funktion:Rd := Rd Ù Rd

Format:0£d£31

Zyklen:1

Flags:
S= N Å V
V= 0
N= Rd[7]
Zgesetzt, falls Ergebnis = 0

Siehe auch:Der Befehl AND
Befehlsreferenz



WDR

Beschreibung: Setzt den Watchdog-Timer zurück. Dieser Befehl muß in bestimmten Zeitabständen (siehe Prozessordatenblatt) aufgerufen werden.

Funktion:Watchdog-Timer Reset

Format:WDR

Zyklen:1

Flags:kein Einfluß

Siehe auch:Der Befehl SLEEP
Befehlsreferenz



Prozessorabhängige Fehlermeldungen

Im folgenden sind die assemblerspezifischen Fehlermeldungen aufgelistet. Eine Liste aller allgemeinen Fehlermeldungen finden Sie hier.

E10065 - Syntaxfehler
Der Befehl ist korrekt, jedoch liegt ein Fehler bei den Parametern vor.

E10066 - Kein Parameter erwartet
Der verwendete Befehl benötigt keinen Parameter, Sie haben jedoch einen Parameter angegeben.

E10067 - Parameter erwartet
Der verwendete Befehl erfordert einen Parameter, es wurde aber keiner angegeben.

E10068 - Ausdruck außerhalb des zulässigen Wertebereichs
Der verwendete Konstanten-Ausdruck liefert einen Wert außerhalb des zulässigen Bereichs zurück.

E10069 - Zweiter Parameter erwartet
Der verwendete Befehl erfordert einen zweiten Parameter, es wurde aber nur einer angegeben.

E10070 - Zu viele Parameter
Es wurden mehr Parameter angegeben, als der Befehl vorsieht.

E10071 - Argument hier nicht zulässig
Einer der verwendeten Parameter ist bei diesem Befehl nicht zulässig.

E10072 - I/O-Adresse beim gewählten Prozessor nicht implementiert/reserved
Die angesprochene I/O-Adresse ist beim ausgewählten Prozessor nicht belegt und kann daher nicht verwendet werden.
E10073 - Diese Anweisung ist bei dem gewählten Prozessor nicht verfügbar
Der angegebene Befehl der AVR-Familie ist beim ausgewählten Prozessor nicht implementiert. Prüfen Sie, ob SIe den richtigen Prozessortyp gewählt haben.

E10074 - Registernummer muß zwischen 0 und 31 liegen
Die Registernummer Rn muß zwischen R0 und R31 liegen. Die AVR-Familie besitzt nur 32 interne Register.

E10075 - Registernummer muß zwischen 16 und 31 liegen
Die Registernummer Rn muß zwischen R16 und R31 liegen. Der gewählte Befehl kann die übrigen Register nicht ansprechen.

E10076 - Registernummer muß 24, 26, 28 oder 30 sein
Die Registernummer Rn muß R24, R26, R28 oder R30 sein. Der gewählte Befehl kann nur die Registerpaare R24/25, R26/27, R28/29 und R30/31 ansprechen.

E10077 - Registernummer muß zwischen 16 und 23 liegen
Die Registernummer Rn muß zwischen R16 und R23 liegen. Der gewählte Befehl kann die übrigen Register nicht ansprechen.

E10078 - Sprungziel liegt außerhalb des ROM-Bereichs des gewählten Prozessors
Die Zieladresse des Sprungbefehls liegt außerhalb des beim ausgewählten Prozessor verfügbaren internen Programmspeichers.

E10079 - Sprungziel liegt außerhalb der Reichweite
Mit dem verwendeten Sprungbefehl kann die angegebene Adresse nicht erreicht werden. Verwenden Sie einen Sprungbefehl, der einen weiteren Adreßbereich abdeckt (RJMP, JMP).

E10080 - Das Ergebnis des Befehls ist undefiniert
Die gewählte Registerkombination ist beim gewählten Befehl nicht zulässig, da das Ergebnis undefiniert ist.

E10081 - Registernummer muß für Word-Operationen gerade sein ({0,2,4,...,30})
Word-Operationen arbeiten nur auf Registerpaaren Rn+1:Rn, wobei n gerade sein muß.

E10082 - Erzeugter Code außerhalb des ROMs (Speicher voll)
Der Programmcode liegt an einer Adresse außerhalb des verfügbaren ROM-Bereichs. Vermutlich ist das Programm zu umfangreich für den gewählten Prozessor. Eventuell wurden aber auch die Befehle ORG oder SETBASE fehlerhaft angewendet.