elektronik:avr_assembler
AVR-Assembler
Befehlsübersicht
Befehl | Art | Typ | 1. Operand | 2. Operand | Ziel | kurze Beschreibung | Beispiel |
---|---|---|---|---|---|---|---|
ADC | Byte | rechnen | r0-31 | r0-31 | 1. Operand | addiert 2 Register + Carry | adc r3,r1 |
ADD | Byte | rechnen | r0-31 | r0-31 | 1. Operand | addiert 2 Register ohne Carry | add r1,r2 |
ADIW | Wort | rechnen | r24,26,28,30 | Konst. 0-63 | 1. Operand | addiert Wort mit Konstante (0-63) | adiw r25:24,1 ; addiere 1 zu r25:r24 |
AND | Byte | Logik | r0-31 | r0-31 | 1. Operand | bitweise UND von 2 Registern | and r2, r16 |
ANDI | Byte | Logik | r16-31 | Konst. 0-255 | 1. Operand | bitweise UND mit Konstante | andi r17,$0F |
@#FF8888: ASR | Byte (S) | rechnen | r0-31 | 1. Operand, Carry | Vorzeichenbeghaftete Variable /2 teilen | asr r16 | |
@#FFFFCC: BCLR | Bit | Logik | Konst. 0-7 | SREG | einzelnes Bit in SREG löschen | bclr 7; Disable interrupts | |
@#FFFFCC: BLD | Bit | Logik | r0-31,b0-7 | r0-31,b0-7 | Lade T-Flag in Register,Bit | bld r0, 4 | |
@#CCCCFF: BRBC | Bit | Abfrage | 0-7 | Sprungmarke (-64-+63) | Springt zu Sprungmarke, wenn Bit in SREG = 0 | brbc 1,noteq | |
@#CCCCFF: BRBS | Bit | Abfrage | 0-7 | Sprungmarke (-64-+63) | Springt zu Sprungmarke, wenn Bit in SREG = 1 | brbs 6, bitset | |
@#CCCCFF: BRCC | Bit | Abfrage | Sprungmarke (-64-+63) | Springt zu Sprungmarke, wenn Carry = 0 | brcc nocarry | ||
@#CCCCFF: BRCS | Bit | Abfrage | Sprungmarke (-64-+63) | Springt zu Sprungmarke, wenn Carry = 1 | brcs carry | ||
@#FF8888: BREAK | Debug | hält CPU an (zum Debuggen) | |||||
@#CCFFCC: BREQ | Byte | Vergleich | Sprungmarke (-64-+63) | Springt zu Sprungmarke, wenn gleich (Z=1) | breq equal | ||
@#FF8888: BRGE | Byte (S) | Vergleich | Sprungmarke (-64-+63) | Springt zu Sprungmarke, wenn größer oder gleich (vorzeichenbehaftete Variable) (S=0) | brge greateq | ||
@#CCCCFF: BRHC | Bit | Abfrage | Sprungmarke (-64-+63) | Springt zu Sprungmarke, wenn Half Carry = 0 | brhc hclear | ||
@#CCCCFF: BRHS | Bit | Abfrage | Sprungmarke (-64-+63) | Springt zu Sprungmarke, wenn Half Carry = 1 | brhs hset | ||
@#CCCCFF: BRID | Bit | Abfrage | Sprungmarke (-64-+63) | Springt zu Sprungmarke, wenn Global Interrupts deaktiviert | brid intdis | ||
@#CCCCFF: BRIE | Bit | Abfrage | Sprungmarke (-64-+63) | Springt zu Sprungmarke, wenn Global Interrupts aktiviert | brie inten | ||
@#CCFFCC: BRLO | Byte | Vergleich | Sprungmarke (-64-+63) | Springt zu Sprungmarke, wenn kleiner | brlo loop | ||
@#FF8888: BRLT | Byte (S) | Vergleich | Sprungmarke (-64-+63) | Springt zu Sprungmarke, wenn kleiner (Vorzeichenbehaftet) | brlt less | ||
@#FF8888: BRMI | Byte (S) | Abfrage | Sprungmarke (-64-+63) | Springt zu Sprungmarke, wenn Negativ | brmi negative | ||
@#CCFFCC: BRNE | Byte | Vergleich | Sprungmarke (-64-+63) | Springt zu Sprungmarke, wenn ungleich | brne loop | ||
@#FF8888: BRPL | Byte (S) | Abfrage | Sprungmarke (-64-+63) | Springt zu Sprungmarke, wenn Positiv | brpl positive | ||
@#CCFFCC: BRSH | Byte | Vergleich | Sprungmarke (-64-+63) | Springt zu Sprungmarke, wenn gleich oder größer | brsh highsm | ||
@#CCCCFF: BRTC | Bit | Abfrage | Sprungmarke (-64-+63) | Springt zu Sprungmarke, wenn T-Flag = 0 | brtc tclear | ||
@#CCCCFF: BRTS | Bit | Abfrage | Sprungmarke (-64-+63) | Springt zu Sprungmarke, wenn T-Flag = 1 | brts tset | ||
@#CCCCFF: BRVC | Bit | Abfrage | Sprungmarke (-64-+63) | Springt zu Sprungmarke, wenn Overflow = 0 | brvc noover | ||
@#CCCCFF: BRVS | Bit | Abfrage | Sprungmarke (-64-+63) | Springt zu Sprungmarke, wenn Overflow = 1 | brvs overfl | ||
@#CCCCFF: BSET | Bit | Logik | 0-7 | SREG | einzelnes Bit in SREG setzen | bset 6 ; setze T flag | |
@#CCCCFF: BST | Bit | Logik | r0-31,b0-7 | T-Flag | Lade Bit aus Register in T-Flag | bst r1,2 ; speichere bit 2 von r1 in T flag | |
CALL | Unter- programm- aufruf | Sprungmarke (0-64k) | Unterprogrammaufruf (lang) | call check ; rufe Unterprogramm auf | |||
CBI | Bit | Ausgabe | r0-31,b0-7 | IO-Pin | Pin ausschalten | cbi $12, 7 ; nulle bit 7 in Port D | |
CBR | Byte | Logik | r16-31 | Konst. 0-255 | 1. Operand | Bits in Register löschen (logisches AND) | cbr r18, 1 ; nulle bit 0 in r18 |
@#CCCCFF: CLC | Bit | Logik | Carry-Flag | lösche Carry-Flag (=0) | clc | ||
@#CCCCFF: CLH | Bit | Logik | HalfCarry-Flag | lösche HalfCarry-Flag (=0) | clh | ||
CLI | Bit | Logik | GIE | Interrupts global deaktivieren | cli | ||
@#CCCCFF: CLN | Bit | Logik | Negativ-Flag = 0 | lösche Negativ-Flag in SREG | cln | ||
CLR | Byte | Logik | r0-31 | 1. Operand | leere Register (=0) | clr r18 | |
@#CCCCFF: CLS | Bit | Logik | Signed-Flag = 0 | lösche Signed-Flag in SREG | cls | ||
CLT | Bit | Logik | T-Flag = 0 | lösche T-Flag in SREG | clt | ||
@#CCCCFF: CLV | Bit | Logik | Overflow-Flag = 0 | lösche Overflow-Flag in SREG | clv | ||
@#CCCCFF: CLZ | Bit | Logik | Zero-Flag = 0 | lösche Zero-Flag in SREG | clz | ||
COM | Byte | Logik | r0-31 | 1. Operand | Einer Komplement | com r4 | |
CP | Byte | Vergleich | r0-31 | r0-31 | SREG | Vergleich; hiernach können alle relativen Sprüng(BR*) ausgeführt werde cp r4,r19 | |
CPC | Wort | Vergleich | r0-31 | r0-31 | SREG | Vergleich unter Beachtung des Carry-Bit | cp r2,r0 ; vergleiche low byte;cpc r3,r1 ; vergleiche high byte;brne noteq ; springe wenn ungleich |
CPI | Byte | Vergleich | r16-31 | Konst. 0-255 | SREG | Vergleich mit Konstante | cpi r19,3 ; vergleiche r19 mit 3 |
CPSE | Byte | Vergleich | r0-31 | r0-31 | Vergleicht 2 Register, überspringt nächsten Befehl, wenn gleic( | cpse r4,r0 ; vergleiche r4 mit r0 | |
DEC | Byte | Zählen | r0-31 | 1. Operand | -1 | dec r17 | |
@#FF8888: DES | 8Byte | Encrypt | Konst. 0-15 | Verschlüsseln? | |||
@#FF8888: EICALL | vermutlich bei 8Bit-AVRs nicht verfügbar | ||||||
@#FF8888: EIJMP | vermutlich bei 8Bit-AVRs nicht verfügbar | ||||||
@#FF8888: ELPM | vermutlich bei 8Bit-AVRs nicht verfügbar | ||||||
EOR | Byte | Logik | r0-31 | r0-31 | 1. Operand | logisches EOR | eor r0,r22 |
FMUL | Bytes | rechnen | r16-23 | r16-23 | r1:r0 | multipliziert 2 Register und schibt Ergebnis 1 nach Links | |
@#FF8888: FMULS | Bytes (S) | rechnen | r16-23 | r16-23 | r1:r0 | multipliziert 2 Register (vorzeichenbehaftet) und schibt Ergebnis 1 nach Links | |
@#FF8888: FMULSU | Bytes (S) | rechnen | r16-23 | r16-23 | r1:r0 | multipliziert 2 Register (1 vorzeichenbehaftet, 1 nicht vorzeichenbehaftet) und schibt Ergebnis 1 nach Links | |
@#FF8888: ICALL | Unter- programm- aufruf | Z-Pointer | Unterprogrammaufruf mit Z-Pointer (vermutlich bei 8Bit-AVRs nicht verfügbar) | icall ; Call routine pointed to by r31:r30 | |||
@#FF8888: IJMP | Sprung | Z-Pointer | indirekter Sprung mit Z-Pointer (vermutlich bei 8Bit-AVRs nicht verfügbar) | ijmp | |||
IN | Byte | Eingabe | r0-31 | A0-63 | 1. Operand | I/O (Ports, Timer, Konfig-Regsiter, etc) in Register laden | in r25,$16 ; lese Port B |
INC | Byte | Zählen | r0-31 | 1. Operand | +1 | inc r17 | |
JMP | Sprung | Sprungmarke (0-4M) | Sprung an Sprungmarke (lang) | jmp farplc | |||
LD | Byte | laden | r0-31 | Pointer (X,Y,Z) | 1. Operand | lade Byte von Pointeradresse in Register | ld r0,X; ld r0,X+; ld r0,-X |
LDI | Byte | laden | r16-31 | Konst. 0-255 | 1. Operand | lade Konstante in Register | ldi r30,$F0 |
LDS | Byte | laden | r0-31 | Konst. 0-65535 | 1. Operand | lade aus gesamtem Speicherbereich in Register | |
LPM | Byte | laden | r0-31 | Z-Pointer | 1. Operand | lade mit Z-Pointer Daten aus Programmspeicher | ldi ZH, high(Table_1«1) ; Initialize Z pointer;ldi ZL, low(Table_1«1);lpm r16, Z ; Load constant from program |
LSL | Byte | Logik | r0-31 | 1. Operand | schiebt Bits in Register um 1 nach links, Bit7 fällt in C-Flag, Bit0 wird 0 | lsl r0 ; Multipliziere r0 mit 2 | |
LSR | Byte | Logik | r0-31 | 1. Operand | schiebt Bits in Register um 1 nach rechts, Bit0 fällt in C-Flag, Bit7 wird 0 | lsr r0 ; teile r0 durch 2 | |
MOV | Byte | kopieren | r0-31 | r0-31 | 1. Operand | kopiert Register | mov r16,r0 ; kopiere r0 nach r16 |
MOVW | Wort | kopieren | dr {0,2,…,30} | dr {0,2,…,30} | 1. Operand | kopiert Registerpaar | movw r17:16,r1:r0 ; Copy r1:r0 to r17:r16 |
MUL | Bytes | rechnen | r0-31 | r0-31 | r1:r0 | multipliziert 2 Bytes ohne Vorzeichen, Ergebnis in r1:r0 | mul r5,r4 ; multipliziere ohne Vorzeichen r5 and r4 |
@#FF8888: MULS | Bytes (S) | rechnen | r0-31 | r0-31 | r1:r0 | multipliziert 2 Bytes mit Vorzeichen, Ergebnis in r1:r0 | muls r5,r4 ; multipliziere mit Vorzeichen r5 and r4 |
@#FF8888: MULSU | Bytes (S) | rechnen | r0-31 | r0-31 | r1:r0 | multipliziert 1 Byte mit Vorzeichen mit einem Byte ohne Vorzeichen, Ergebnis in r1:r0 | |
@#FF8888: NEG | Bytes | Logik | r0-31 | 1. Operand | Zweierkompliment | ||
NOP | warte 1 Takt | nop ; tue nichts | |||||
OR | Bytes | Logik | r0-31 | r0-31 | 1. Operand | Logisches OR mit Register | or r15,r16 ; bitweises OR |
ORI | Bytes | Logik | r0-31 | Konst. 0-255 | 1. Operand | Logisches OR mit Konstante | or r15,$25 ; bitweises OR |
OUT | Bytes | Ausgabe | A0-63 | r0-31 | 1. Operand | Ausgabe des Registerinhalts auf IO (Ports, Timer, Konfig-Regsiter, etc) | out $18,r16 ; r16 auf PORTB ausgeben |
POP | Bytes | kopieren | r0-31 | Byte aus Stack in Register laden | push r13 ; Save r13 on the stack;…;pop r13 ; Restore r13 | ||
PUSH | Bytes | kopieren | r0-31 | STACK | Byte in Stack sichern | push r13 ; Save r13 on the stack;…;pop r13 ; Restore r13 | |
RCALL | Unter- programm- aufruf | Sprungmarke (-2k-+2k) | Unterprogrammaufruf (kurz) | rcall routine | |||
RET | Unter- programm- aufruf | Rückkehr aus Unterprogramm (muss am Ende eines Unterprogramms stehen, welches mit ®call aufgerufen wird) | ret ; zurück | ||||
RETI | Unter- programm- aufruf | Rückkehr aus Interrupt (muss am Ende der Interrupt-Routine stehen) | reti ; weiter im Programm | ||||
RJMP | Sprung | Sprungmarke (-2k-+2k) | Sprung an Sprungmarke (kurz) | rjmp woanders | |||
ROL | Byte | Logik | r0-31 | 1. Operand | schiebt Bits in Register 1 nach links durch Carry (Carry in Bit0, Bit7 in Carry) | rol r19 | |
ROR | Byte | Logik | r0-31 | 1. Operand | schiebt Bits in Register 1 nach rechts durch Carry (Carry in Bit7, Bit0 in Carry) | ror r19 | |
SBC | Byte | rechnen | r0-31 | r0-31 | 1. Operand | Subtraktion mit Carry | sub r2,r0 ; Subtract low byte;sbc r3,r1 ; Subtract with carry high byte |
SBR | Byte | Logik | r16-31 | Konst. 0-255 | 1. Operand | Bits in Register setzen (logisches ORI) | sbr r18, 1 ; setze bit 0 in r18 |
SBRC | Bit | Vergleich | r0-31,b0-7 | überspringe nächsten Befehl, wenn Bit in Register = | sbrc r0,7 ; springe, wenn bit7 in r0 =0 ist | ||
SBRS | Bit | Vergleich | r0-31,b0-7 | überspringe nächsten Befehl, wenn Bit in Register = | sbrc r0,7 ; springe, wenn bit7 in r0 =1 ist | ||
@#CCCCFF: SEC | Bit | Logik | Setze Carry-Flag | sec ; setze Carry-Flag | |||
@#CCCCFF: SEH | Bit | Logik | Setze HalfCarry-Flag | seh ; setze HalfCarry-Flag | |||
SBI | Bit | Ausgabe | A0-31,b0-7 | 1. Operand | setze Bit in I/O-Register | sbi PORTB,0 ; schalte pin0 von PORTB ein | |
SBCI | Byte | rechnen | r16-31 | Konst. 0-255 | 1. Operand | substrahiere Konstante mit Carry (von Register) | subi r16,$23 ; substrahiere LOW-Byte; sbci r17,$4F ; Substrahiere mit Carry HIGH-Byte |
SBIC | Bit | Vergleich | A0-31,b0-7 | überspringe nächsten Befehl, wenn Bit in I/O-Register = | sbic $1C,1 ; überspringe nächsten Befehl, wenn EEWE = 0 | ||
SBIS | Bit | Vergleich | A0-31,b0-7 | überspringe nächsten Befehl, wenn Bit in I/O-Register = | sbic PORTB,0 ; überspringe nächsten Befehl, wenn PORTB,0 = 1 | ||
SBIW | Wort | rechnen | r24,26,28,30 | Konst. 0-63 | 1. Operand | substrahiere Konstante von Wort | sbiw YH:YL,63 ; Subtrahiere 63 vom Y Pointer(r29:r28) |
SEI | Bit | Logik | GIE | setze globales Interrupt-Flag | sei ; Interrupts erlauben | ||
@#CCCCFF: SEN | Bit | Logik | setze Negativ-Flag | ||||
SER | Byte | Logik | r16-31 | 1. Operand | setze alle Bits im Register | ser r17 ; r17 = 255 | |
@#CCCCFF: SES | Bit | Logik | setze Signed-Flag | ||||
@#CCCCFF: SET | Bit | Logik | setze T-Flag | ||||
@#CCCCFF: SEV | Bit | Logik | setze Overflow-Flag | ||||
@#CCCCFF: SEZ | Bit | Logik | setze Zero-Flag | ||||
@#FFFFCC: SLEEP | versetzt µC in Schlaf-Modus | ||||||
@#FF8888: SPM | Byte | speichern | Daten in Programmspeicher schreiben | ||||
ST | Byte | sichern | r0-31 | SRAM | Daten mit Pointer in SRAM speichern | st X,r17; stX+,r17; st-X,r17 | |
STS | Byte | sichern | r16-31 | Konst. 0-65535 | data SPace / SRAM | Register in SRAM speichern | sts 64,r1 ; speichere r1 in SRAM-Adresse 64 |
SUB | Byte | rechnen | r0-31 | r0-31 | 1. Operand | subtrahiere ohne Carry | sub r13,r12 ; substrahiere r12 von r13 |
SUBI | Byte | rechnen | r0-31 | Konst. 0-255 | 1. Operand | subtrahiere Konstante von Register | subi r13,$11 ; substrahiere $11 von r13 |
SWAP | Byte | Logik | r0-31 | 1. Operand | tausche oberes und unteres Nibble vom Register | swap r13 | |
TST | Byte | Vergleich | r0-31 | Teste auf Null oder Minus | tst r0 ; teste r0; breq zero ; springe, wenn r0=0 | ||
WDR | Reset | Watchdog | Watchdog Timer zurücksetzen | wdr ; reset watchdog timer |
elektronik/avr_assembler.txt · Zuletzt geändert: 2017/11/30 08:46 von 127.0.0.1