AVR ASM Befehlsübersicht
Aus der Mikrocontroller.net Artikelsammlung, mit Beiträgen verschiedener Autoren (siehe Versionsgeschichte)
Die Abkürzungen in der Tabelle bedeuten:
r1 ---- Allgemeines Quell- und Zielregister R0..R31 r2 ---- Allgemeines Quellregister R0..R31 rh ---- Oberes Register R16..R31 rd ---- Doppelregister R24(R25), R26(R27), R28(R29), R30(R31) rp ---- Pointerregister X=R26(R27), Y=R28(R29), Z=R30(R31) ry ---- Pointerregister mit Ablage Y=R28(R29), Z=R30(R31) k63 --- Pointer-Konstante 0..63 k127 -- Bedingte Sprungdistanz -64..+63 k255 -- 8-Bit-Konstante 0..255 k4096 - Relative Sprungdistanz -2048..+2047 k65535 16-Bit-Adresse 0..65535 Bit --- b7 Bitposition 0..7 Port -- p1 Beliebiger Port 0..63 pl ---- Unterer Port 0..31
Funktion | Unterfunktion | Befehl | Flags | Clk |
---|---|---|---|---|
Register setzen | 0 | CLR r1 | Z N V | 1 |
255 | SER rh | 1 | ||
Konstante | LDI rh,k255 | 1 | ||
Kopieren | Register => Register | MOV r1,r2 | 1 | |
SRAM => Register, direkt | LDS r1,k65535 | 2 | ||
SRAM => Register | LD r1,rp | 2 | ||
SRAM => Register mit INC | LD r1,rp+ | 2 | ||
DEC, SRAM => Register | LD r1,-rp | 2 | ||
SRAM, indiziert => Register | LDD r1,ry+k63 | 2 | ||
Port => Register | IN r1,p1 | 1 | ||
Stack => Register | POP r1 | 2 | ||
Programmspeicher Z => R0 | LPM | 3 | ||
Register => SRAM, direkt | STS k65535,r1 | 2 | ||
Register => SRAM | ST rp,r1 | 2 | ||
Register => SRAM mit INC | ST rp+,r1 | 2 | ||
DEC, Register => SRAM | ST -rp,r1 | 2 | ||
Register => SRAM, indiziert | STD ry+k63,r1 | 2 | ||
Register => Port | OUT p1,r1 | 1 | ||
Register => Stack | PUSH r1 | 2 | ||
Addition | 8 Bit, +1 | INC r1 | Z N V | 1 |
8 Bit | ADD r1,r2 | Z C N V H | 1 | |
8 Bit+Carry | ADC r1,r2 | Z C N V H | 1 | |
16 Bit, Konstante | ADIW rd,k63 | Z C N V S | 2 | |
Subtraktion | 8 Bit, -1 | DEC r1 | Z N V | 1 |
8 Bit | SUB r1,r2 | Z C N V H | 1 | |
8 Bit, Konstante | SUBI rh,k255 | Z C N V H | 1 | |
8 Bit - Carry | SBC r1,r2 | Z C N V H | 1 | |
8 Bit - Carry, Konstante | SBCI rh,k255 | Z C N V H | 1 | |
16 Bit | SBIW rd,k63 | Z C N V S | 2 | |
Schieben | Logisch, links | LSL r1 | Z C N V | 1 |
Logisch, rechts | LSR r1 | Z C N V | 1 | |
Rotieren, links über Carry | ROL r1 | Z C N V | 1 | |
Rotieren, rechts über Carry | ROR r1 | Z C N V | 1 | |
Arithmetisch, rechts | ASR r1 | Z C N V | 1 | |
Nibbletausch | SWAP r1 | 1 | ||
Binär | Und | AND r1,r2 | Z N V | 1 |
Und, Konstante | ANDI rh,k255 | Z N V | 1 | |
Oder | OR r1,r2 | Z N V | 1 | |
Oder, Konstante | ORI rh,k255 | Z N V | 1 | |
Exklusiv-Oder | EOR r1,r2 | Z N V | 1 | |
Einer-Komplement | COM r1 | Z C N V | 1 | |
Zweier-Komplement | NEG r1 | Z C N V H | 1 | |
Bits ändern | Register, Setzen | SBR rh,k255 | Z N V | 1 |
Register, Rücksetzen | CBR rh,255 | Z N V | 1 | |
Register, Kopieren nach T-Flag | BST r1,b7 | T | 1 | |
Register, Kopie von T-Flag | BLD r1,b7 | 1 | ||
Port, Setzen | SBI pl,b7 | 2 | ||
Port, Rücksetzen | CBI pl,b7 | 2 | ||
Statusbit setzen | Zero-Flag | SEZ | Z | 1 |
Carry Flag | SEC | C | 1 | |
Negativ Flag | SEN | N | 1 | |
Zweierkompliment Überlauf Flag | SEV | V | 1 | |
Halbübertrag Flag | SEH | H | 1 | |
Signed Flag | SES | S | 1 | |
Transfer Flag | SET | T | 1 | |
Interrupt Enable Flag | SEI | I | 1 | |
Statusbit rücksetzen | Zero-Flag | CLZ | Z | 1 |
Carry Flag | CLC | C | 1 | |
Negativ Flag | CLN | N | 1 | |
Zweierkompliment Überlauf Flag | CLV | V | 1 | |
Halbübertrag Flag | CLH | H | 1 | |
Signed Flag | CLS | S | 1 | |
Transfer Flag | CLT | T | 1 | |
Interrupt Enable Flag | CLI | I | 1 | |
Vergleiche | Register, Register | CP r1,r2 | Z C N V H | 1 |
Register, Register + Carry | CPC r1,r2 | Z C N V H | 1 | |
Register, Konstante | CPI rh,k255 | Z C N V H | 1 | |
Register, ≤0 | TST r1 | Z N V | 1 | |
Unbedingte Verzweigung | Relativ | RJMP k4096 | 2 | |
Indirekt, Adresse in Z | IJMP | 2 | ||
Unterprogramm, relativ | RCALL k4096 | 3 | ||
Unterprogramm, Adresse in Z | ICALL | 3 | ||
Return vom Unterprogramm | RET | 4 | ||
Return vom Interrupt | RETI | I | 4 | |
Bedingte Verzweigung | Statusbit gesetzt | BRBS b7,k127 | 1/2 | |
Statusbit rückgesetzt | BRBC b7,k127 | 1/2 | ||
Springe bei gleich | BREQ k127 | 1/2 | ||
Springe bei ungleich | BRNE k127 | 1/2 | ||
Springe bei Überlauf | BRCS k127 | 1/2 | ||
Springe bei Carry=0 | BRCC k127 | 1/2 | ||
Springe bei gleich oder größer | BRSH k127 | 1/2 | ||
Springe bei kleiner | BRLO k127 | 1/2 | ||
Springe bei negativ | BRMI k127 | 1/2 | ||
Springe bei positiv | BRPL k127 | 1/2 | ||
Springe bei größer oder gleich (Vorzeichen) | BRGE k127 | 1/2 | ||
Springe bei kleiner Null (Vorzeichen) | BRLT k127 | 1/2 | ||
Springe bei Halbübertrag | BRHS k127 | 1/2 | ||
Springe bei HalfCarry=0 | BRHC k127 | 1/2 | ||
Springe bei gesetztem T-Bit | BRTS k127 | 1/2 | ||
Springe bei gelöschtem T-Bit | BRTC k127 | 1/2 | ||
Springe bei Zweierkomplementüberlauf | BRVS k127 | 1/2 | ||
Springe bei Zweierkomplement-Flag=0 | BRVC k127 | 1/2 | ||
Springe bei Interrupts eingeschaltet | BRIE k127 | 1/2 | ||
Springe bei Interrupts ausgeschaltet | BRID k127 | 1/2 | ||
Bedingte Sprünge | Registerbit=0 | SBRC r1,b7 | 1/2/3 | |
Registerbit=1 | SBRS r1,b7 | 1/2/3 | ||
Portbit=0 | SBIC pl,b7 | 1/2/3 | ||
Portbit=1 | SBIS pl,b7 | 1/2/3 | ||
Vergleiche, Sprung bei gleich | CPSE r1,r2 | 1/2/3 | ||
Andere | No Operation | NOP | 1 | |
Sleep | SLEEP | 1 | ||
Watchdog Reset | WDR | 1 |
Autor: Megges