EICALL - Extended Indirect Call to Subroutine
EIJMP - Extended Indirect Jump
ELPM - Extended Load Program Memory
EOR - Exclusive OR
Syntax: | EICALL |
Funktion: | Dieser Befehl ruft ein Unterprogramm auf, das über den Z-Pointer und das EIND Register im I/O-Speicher adressiert wird. Mit diesem Befehl kann also der vollständige Programmspeicher adressiert werden. Die Rücksprungadresse wird im STACK zwischengespeichert. Der Befehl kann nur in Bausteinen mit einem 22 Bit breiten PC benutzt werden (bei 16 Bit PC siehe ICALL) |
Operation: |
PC(15:0) ← Z(15:0) PC(21:16) ← EIND STACK ← PC + 1 SP ← SP -3 |
Operanden: | keine |
Programmzähler: | siehe Operation |
Words: | 1 (2 Byte) |
Zyklen: | 4 |
16 Bit Operations Code: | 1001 0101 0001 1001 |
I | T | H | S | V | N | Z | C |
---|---|---|---|---|---|---|---|
- | - | - | - | - | - | - | - |
ldi r16,$05 ;Das Register EIND mit out EIND,r16 ;dem Wert 05h laden. ldi r30,$00 ;Low-Byte Z-Pointer laden ldi r31,$10 ;High-Byte Z-Pointer laden eicall ;Unterprogramm an Adresse 051000h aufrufen
Syntax: | EIJMP |
Funktion: | Dieser Befehl springt zu einer Adresse, die über den Z-Pointer und das EIND-Register im I/O-Speicher adressiert wird. Mit diesem Befehl kann also der vollständige Programmspeicher adressiert werden. Der Befehl ist nicht in allen Bausteinen verfügbar. |
Operation: |
PC(15:0) ← Z(15:0) PC(21:16) ← EIND |
Operanden: | keine |
Programmzähler: | siehe Operation |
Words: | 1 (2 Byte) |
Zyklen: | 2 |
16 Bit Operations Code: | 1001 0100 0001 1001 |
I | T | H | S | V | N | Z | C |
---|---|---|---|---|---|---|---|
- | - | - | - | - | - | - | - |
ldi r16,$05 ;Das Register EIND mit out EIND,r16 ;dem Wert 05h laden. ldi r30,$00 ;Low-Byte Z-Pointer laden ldi r31,$10 ;High-Byte Z-Pointer laden eijmp ;Sprung zu Adresse 051000h
Syntax: |
(a) ELPM (b) ELPM Rd,Z (c) ELPM Rd,Z+ |
Funktion: |
Dieser Befehl lädt ein Byte, das über das Z-Register und das RAMPZ-Register
adressiert ist, aus dem Programmspeicher in das Register Rd. Mit dem Befehl kann der
gesamte Programmspeicher adressiert werden. Der Programmspeicher enthält an jeder
Adresse 2 Byte (1 Word). Daher adressiert das Z-Register, wenn das LSB 0 ist, das
niederwertige Byte der Adresse und mit LSB = 1 das höherwertige Byte des Wortes an
der Adresse. Das Z-Register kann mit dem Befehl entweder unverändert bleiben oder
automatisch inkrementiert werden. Das Inkrementieren wirkt sich auf die verketteten
RAMPZ- und Z-Register aus. Bei Bausteinen mit der Möglichkeit des Selbstprogrammierens kann der LPM - Befehl verwendet werden, um die Werte der Fuse- und Lock-Bits zu lesen. Der Befehl ist nicht in allen Bausteinen enthalten. |
Operation: |
(a) R0 ← (RAMPZ:Z) (b) Rd ← (RAMPZ:Z) (c) Rd ← (RAMPZ:Z), RAMPZ:Z ← RAMPZ:Z + 1 |
Operanden: |
(a) keiner, R0 ist das Ziel (b) 0 ≤ d ≤ 31 (c) 0 ≤ d ≤ 31 |
Programmzähler: | PC ← PC + 1 |
Words: | 1 (2 Byte) |
Zyklen: | 3 |
16 Bit Operations Code: |
(a) 1001 0101 1101 1000 (b) 1001 000d dddd 0110 (c) 1001 000d dddd 0111 |
I | T | H | S | V | N | Z | C |
---|---|---|---|---|---|---|---|
- | - | - | - | - | - | - | - |
ldi ZH,$01 ;ZH-Register mit 01h laden out RAMPZ,ZH ;01h in RAMPZ schreiben ldi r30,$00 ;Low-Byte Z-Pointer mit 00h laden elpm r20,Z+ ;Low-Byte aus Adresse 010100h in R20 laden, ;anschließend Zeiger inkrementieren ... elpm r20,Z ;High-Byte aus Adresse 010101h in R20 laden
Syntax: | EOR Rd,Rr |
Funktion: | Dieser Befehl führt eine Exclusiv-Oder - Verknüpfung zwischen den Registern Rd und Rr durch. Das Ergebnis wird im Register Rd abgelegt. |
Operation: | Rd ← Rd Rr |
Operanden: | 0 ≤ d ≤ 31, 0 ≤ r ≤ 31 |
Programmzähler: | PC ← PC + 1 |
Words: | 1 (2 Byte) |
Zyklen: | 1 |
16 Bit Operations Code: | 0010 01rd dddd rrrr |
I | T | H | S | V | N | Z | C |
---|---|---|---|---|---|---|---|
- | - | - | ↔ | 0 | ↔ | ↔ | - |
S: | Das S-Flag wird gesetzt, wenn das N-Flag gesetzt ist, andernfalls wird das S-Flag gelöscht. |
V: | Das V-Flag wird gelöscht. |
N: | Das N-Flag wird gesetzt, wenn das MSB des Ergebnisses gesetzt ist, andernfalls wird es gelöscht. |
Z: | Das Z-Flag wird gesetzt, wenn das Ergebnis 00h ist, andernfalls wird das Flag gelöscht. |
eor r3,r3 ;Das Register R3 wird gelöscht eor r30,r23 ;Exclusiv-Oder - Verknüpfung zwischen ;R30 und R23, Ergebnis in R30