Das 8051 Assemblermodul

Inhalt

8051 Befehlsreferenz
8051 Adressierungmodi
Fehlermeldungen


Befehlsreferenz der 8051-Familie und zusätzliche Pseudokommandos

A
ACALL ADD ADDC AJMP ANL
B
BIT
C
CJNE CLR CPL
D
DA A DEC DIV DJNZ
I
INC
J
JB JBC JC JNB JNC JMP JZ JNZ
L
LCALL LJMP
M
MOV MOVC MOVX MUL
N
NOP
O
ORL
P
POP PUSH
R
RET RETI RL RLC RR RRC
S
SETB SJMP SUBB SWAP
X
XCH XCHD XRL

Siehe auch: Assemblerreferenz


Adressierungsmodi

In dieser Kurzreferenz werden folgende Kürzel für die einzelnen Adressierungsmodi der 8051-Prozessoren verwendet:

RnRegister R7 - R0 der aktuell gewählten Registerbank
directZelle im internen Datenspeicher (SFR oder RAM).
@RiInternes RAM indirekt adressiert durch R0 oder R1.
#data8-Bit Konstante
#data1616-Bit Konstante
addr1616-Bit Zieladresse. Siehe LCALL, LJMP
addr1111-Bit Zieladresse. Siehe ACALL, AJMP
relVorzeichenbehaftetes Offset-Byte. Siehe SJMP
bitDirekt adressiertes Bit im internen RAM oder SFR

Bitadressen
Bitadressen können aus den zugehörigen SFR-Adressen bzw. den zugehörigen RAM-Byte-Adressen einfach durch Nachstellen der Bitnummer erhalten werden, so liefert z.B. ACC.5 die Bitadresse für das 5. Bit im Akkumulator. Will man selber einen Bitnamen definieren, beispielsweise für das dritte Bit im Port 1, geht dies problemslos durch:

LAMPE: BIT  P1.3
       ; Lampe an:
       SETB LAMPE
       ; Lampe aus:
       CLR  LAMPE


Dies setzt natürlich voraus, daß die vordefinierten SFR-Namen in den Assembleroptionen eingeschaltet sind.
Der Assembler kennt eine Reihe von vordefinierten Bitnamen, diese lassen sich in den Assembleroptionen ein- und ausschalten.

Adressprüfung
Der Assembler prüft bei jedem direkt adressierten Byte oder Bit, ob die entsprechende Speicherzelle beim gewählten Prozessormodell implementiert ist, und erzeugt einen Fehler, falls nicht.

Siehe auch: Assemblerreferenz


ACALL addr11

Beschreibung: ACALL ruft ein Unterprogramm an der angegebenen Adresse auf. Der Befehl inkrementiert den PC zweimal, um die Adresse der folgenden Anweisung zu erhalten, dann wird das 16-bit Ergebnis auf dem Stack abgelegt (LSB zuerst) und der Stackpointer zweimal inkrementiert. Die Zieladresse setzt sich aus den oberen fünf Bits des PC, den Bits 7...5 des ersten Befehlsbytes und dem zweiten Befehlsbyte zusammen. Daher muß das aufgerufene Unterprogramm im gleichen 2K-Block liegen wie der Befehl nach dem ACALL.

Funktion:
PC := PC + 2
SP := SP + 1
(SP) := PC[7...0]
SP := SP + 1
(SP) := PC[15...8]
PC[10...0] := addr11[10...0]

Zyklen:2

Flags:kein Einfluß

Siehe auch:Der Befehl LCALL
Befehlsreferenz



ADD A,<src-byte>

Beschreibung: ADD addiert die angegebene Byte-Variable zum Akkumulator. Das Ergebnis kommt wieder in den Akkumulator.

Funktion:A := A + <src-byte>

Format:
ADD A,Rn
ADD A,direct
ADD A,@Ri
ADD A,#data

Zyklen:1

Flags:Carry bzw. Auxiliary-carry werden gesetzt, wenn ein Übertrag von Bit 7 bzw. Bit 3 stattfindet, andernfalls gelöscht. Bei der Addition von vorzeichenlosen Zahlen zeigt das Carry-Flag einen Überlauf an.
OV wird gesetzt, wenn ein Übertrag von Bit 6, aber nicht von Bit 7 stattfindett oder umgekehrt ein Übertrag von Bit 7, aber nicht von Bit 6. Andernfalls wird OV zurückgesetzt. Bei der Addition von vorzeichenbehafteten Zahlen zeigt OV an, daß ein negatives Ergebnis aus zwei positiven Zahlen entstanden ist oder umgekehrt.

Siehe auch:Der Befehl ADDC
Befehlsreferenz
Adressierungsmodi



ADDC A,<src-byte>

Beschreibung: ADDC addiert die angegebene Byte-Variable und das Carry-Flag zum Akkumulator. Das Ergebnis kommt wieder in den Akkumulator.

Funktion:A := A + C + <src-byte>

Format:
ADDC A,Rn
ADDC A,direct
ADDC A,@Ri
ADDC A,#data

Zyklen:1

Flags:Carry bzw. Auxiliary-carry werden gesetzt, wenn ein Übertrag von Bit 7 bzw. Bit 3 stattfindet, andernfalls gelöscht. Bei der Addition von vorzeichenlosen Zahlen zeigt das Carry-Flag einen Überlauf an.
OV wird gesetzt, wenn ein Übertrag von Bit 6, aber nicht von Bit 7 stattfindett oder umgekehrt ein Übertrag von Bit 7, aber nicht von Bit 6. Andernfalls wird OV zurückgesetzt. Bei der Addition von vorzeichenbehafteten Zahlen zeigt OV an, daß ein negatives Ergebnis aus zwei positiven Zahlen entstanden ist oder umgekehrt.

Siehe auch:Die Befehle ADD, SUBB
Befehlsreferenz
Adressierungsmodi



AJMP addr11

Beschreibung: AJMP setzt die Programmausführung bei der angegebenen Adresse fort. Die Zieladresse setzt sich aus den oberen fünf Bits des PC, den Bits 7...5 des ersten Befehlsbytes und dem zweiten Befehlsbyte zusammen. Daher muß der aufgerufene Programmteil im gleichen 2K-Block liegen wie der Befehl nach dem AJMP.

Funktion:
PC := PC + 2
PC[10...0] := addr11[10...0]

Zyklen:2

Flags:kein Einfluß

Siehe auch:Die Befehle LJMP, SJMP
Befehlsreferenz



ANL <dest>,<src>

Beschreibung: ANL führt eine UND-Verknüpfung zwischen <dest> und <src> durch und speichert das Ergebnis in <dest>.

Format:
ANL <dest-byte>,<src-byte>
ANL C,<src-bit>

Siehe auch:Befehlsreferenz



ANL <dest-byte>,<src-byte>

Beschreibung: ANL führt eine bitweise UND-Verknüpfung zwischen den angegebenen Variablen durch und speichert das Ergebnis in <dest-byte>. Wenn der Befehl verwendet wird, um einen Ausgangsport zu verändern, so wird der Wert für die Originaldaten des Ports aus dem Ausgabelatch gelesen, nicht von den Port-Pins.

Funktion:<dest-byte> := <dest-byte> Ù <src-byte>

Format:
ANL A,Rn
ANL A,direct
ANL A,@Ri
ANL A,#data
ANL direct,A
ANL direct,#data

Zyklen:
ANL direct,#data: 2
sonst:1

Flags:kein Einfluß

Siehe auch:Die Befehle ANL C,<src-bit>, ORL, XRL
Befehlsreferenz
Adressierungsmodi



ANL C,<src-bit>

Beschreibung: Ist <src-bit> gesetzt, so bleibt das Carry-Flag unverändert. Ist <src-bit> nicht gesetzt, so wird das Carry-Flag gelöscht.

Format/Funktion:
ANL C,bitC := C Ù bit
ANL C,/bitC := C Ù Øbit

Zyklen:2

Flags:kein Einfluß (außer Carry)

Siehe auch:Die Befehle ANL <dest-byte>,<src-byte>, ORL C,<src-bit>
Befehlsreferenz
Adressierungsmodi



BIT <byte-adr>.<bitnr>
BIT <bit-adr>


Beschreibung: BIT definiert ein Symbol (Label) mit der angegebenen Bitadresse. Wird ein Ausdruck der Form <byte-adr>.<0...7> verwendet, so wird dem Symbol die Adresse des angegebenen Bits zugewiesen. Enthält der Ausdruck keinen Punkt (.) an letzter Stelle, so verhält sich BIT ähnlich zum Befehl EQU, d.h., dem Symbol wird einfach der angegebene Wert zugewiesen.
BIT prüft, ob die angegebene Bitadresse im gewählten Prozessor verfügbar ist.

Siehe auch:Der Befehl EQU
Pseudokommandos

Beispiel:LED:    BIT P1.7



CJNE <dest-byte>,<src-byte>,<rel-addr>

Beschreibung: CJNE vergleicht die ersten beiden Operanden und verzweigt zum Sprungziel, wenn die Werte nicht gleich sind. Das Sprungziel wird aus dem gegebenen vorzeichenbehafteten Offset und dem PC (nach Ausführung des Befehls) berechnet. Der Offset wird vom Assembler automatisch aus einer Zieladresse berechnet..

Funktion:
PC := PC + 3
IF <dest-byte> ¹ <src-byte> THEN
  PC := PC + <rel-addr>
IF <dest-byte> < <src-byte> THEN
  C := 1
ELSE
  C := 0

Format:
CJNE A,direct,<rel-addr>
CJNE A,#data,<rel-addr>
CJNE Rn ,#data,<rel-addr>
CJNE @Ri ,data,<rel-addr>

Zyklen:2

Flags:Das Carry-Flag wird gesetzt, falls <dest-byte> (nicht vorzeichenbehaftet) kleiner ist als <src-byte>, andernfalls gelöscht.

Siehe auch:Der Befehl DJNZ
Befehlsreferenz
Adressierungsmodi



CLR <dest>

Beschreibung: Das angegebene Ziel wird gelöscht (mit 0 geladen).

Format:
CLR A
CLR bit

Siehe auch:Die Befehle CPL, SETB
Befehlsreferenz



CRL A

Beschreibung: Der Akkumulator wird gelöscht (mit 0 geladen).

Funktion:A := 0

Zyklen:1

Flags:kein Einfluß

Siehe auch:Der Befehl CLR bit
Befehlsreferenz



CLR bit

Beschreibung: Das angegebene Bit wird gelöscht (mit 0 geladen).

Funktion:bit := 0

Format:bit kann jedes direkt adressierbare Bit oder C (Carry-Flag) sein.

Zyklen:1

Flags:kein Einfluß

Siehe auch:Die Befehle SETB, CLR A
Befehlsreferenz
Adressierungsmodi



CPL <dest>

Beschreibung: Das angegebene Ziel wird komplementiert.

Format:
CPL A
CPL bit

Siehe auch:Die Befehle CLR, SETB
Befehlsreferenz



CPL A

Beschreibung: Der Akkumulator wird komplementiert (Einerkomplement), d.h. jedes 0-Bit wird zu einem 1-Bit und umgekehrt.

Funktion:A := ¬ A

Zyklen:1

Flags:kein Einfluß

Siehe auch:Der Befehl CPL bit
Befehlsreferenz



CPL bit

Beschreibung: Das angegebene Bit wird komplementiert.

Funktion:bit := ¬ bit

Format:bit kann jedes direkt adressierbare Bit oder C (Carry-Flag) sein.

Zyklen:1

Flags:kein Einfluß

Siehe auch:Der Befehl CPL A
Befehlsreferenz
Adressierungsmodi



DA A

Beschreibung: DA A gleicht den Acht-Bit-Wert im Akku nach einer vorangegangenen Addition (ADD oder ADDC) zweier Werte im gepackten BCD-Format wieder zu einer BCD-Zahl (mit zwei Ziffern) ab.
Wenn die Akkumulator-Bits 0 bis 3 größer als 9 sind (d.h. 0xAh...0xFh), oder wenn das AC-Flag gesetzt ist, wird 6 zum Akkumulator addiert. Dies erzeugt das gewünschte Digit im unteren Nibble. Diese Addition setzt das Carry-Flag, falls ein Übertrag von Bit 7 des Akkus entsteht (falls nicht, behält das Carry-Flag seinen alten Zustand).
Ist das Carry-Flag gesetzt oder sind die oberen vier Akkumulator-Bits größer als 9 (0Axh...0Fxh), wird 6 zur oberen Hälfte des Akkumulators addiert. Dies erzeugt das gewünschte BCD-Digit im oberen Nibble des Akkus. Auch diese Addition setzt das Carry-Flag, falls ein Übertrag von Bit 7 des Akkus entsteht (falls nicht, behält das Carry-Flag seinen alten Zustand).
Nach der Operation zeigt ein gesetztes Carry-Flag an, daß die Summe der ursprünglichen zwei BCD-Variablen größer als 99 war.

Funktion:siehe Text

Zyklen:1

Flags:außer Carry (s.o.) kein Einfluß

Siehe auch:Befehlsreferenz



DEC <byte>

Beschreibung: DEC dekrementiert die angegebene Variable um 1. War der ursprüngliche Wert 0, so findet ein Unterlauf auf 0FFh statt.
Wird der Befehl verwendet, um einen Ausgangsport zu dekrementieren, so werden die Originaldaten aus dem Ausgangslatch, nicht von den Port-Pins genommen.

Funktion:<byte> := <byte> - 1

Format:
DEC A
DEC Rn
DEC direct
DEC @Ri

Zyklen:1

Flags:kein Einfluß.

Siehe auch:Der Befehl INC
Befehlsreferenz
Adressierungsmodi



DIV AB

Beschreibung: DIV AB dividiert den vorzeichenlosen 8-Bit-Wert im Akku durch den vorzeichenlosen 8-Bit-Wert im B-Register. Der (ganzzahlige) Quotient kommt in den Akku, der Divisionsrest in das B-Register. Bei einer Division durch Null ist das Ergebnis unbestimmt.

Zyklen:4

Flags:Carry wird gelöscht. OV wird gesetzt, falls B Null war, ansonsten gelöscht.

Siehe auch:Der Befehl MUL
Befehlsreferenz



DJNZ <byte>,<rel-addr>

Beschreibung: DJNZ dekrementiert das angegebene <byte> um 1 und verzweigt zum Sprungziel, sofern das Ergebnis nicht Null ist. Das Sprungziel wird aus dem gegebenen vorzeichenbehafteten Offset und dem PC (nach Ausführung des Befehls) berechnet. Der Offset wird vom Assembler automatisch aus einer Zieladresse berechnet..

Funktion:
PC := PC + 2
<byte> := <byte> - 1
IF <byte> ¹ 0 THEN
  PC := PC + <rel-addr>

Format:
DJNZ Rn,<rel-addr>
DJNZ direct,<rel-addr>

Zyklen:2

Flags:kein Einfluß

Siehe auch:Die Befehe CJNE, DEC
Befehlsreferenz
Adressierungsmodi



INC <dest>

Beschreibung: INC inkrementiert die angegebene Variable um 1.

Format:
INC <byte>
INC DPTR

Siehe auch:Der Befehl DEC
Befehlsreferenz



INC <byte>

Beschreibung: INC inkrementiert die angegebene Variable um 1. War der ursprüngliche Wert 0FFh, so findet ein Überlauf auf 0 statt.
Wird der Befehl verwendet, um einen Ausgangsport zu inkrementieren, so werden die Originaldaten aus dem Ausgangslatch, nicht von den Port-Pins genommen.

Funktion:<byte> := <byte> + 1

Format:
INC A
INC Rn
INC direct
INC @Ri

Zyklen:1

Flags:kein Einfluß.

Siehe auch:Der Befehl DEC
Befehlsreferenz
Adressierungsmodi



INC DPTR

Beschreibung: DPTR wird um 1 inkrementiert (16-Bit-Operation). Findet ein Überlauf von Bit 7 statt (DPL), so wird DPH inkrementiert.

Funktion:DPTR := DPTR + 1

Zyklen:2

Flags:kein Einfluß.

Siehe auch:Der Befehl INC
Befehlsreferenz



JB bit,<rel-addr>

Beschreibung: JB verzweigt zum Sprungziel, sofern das angegebene bit gesetzt ist. Das Sprungziel wird aus dem gegebenen vorzeichenbehafteten Offset und dem PC (nach Ausführung des Befehls) berechnet. Der Offset wird vom Assembler automatisch aus einer Zieladresse berechnet.

Funktion:
PC := PC + 3
IF bit = 1 THEN
  PC := PC + <rel-addr>

Zyklen:2

Flags:kein Einfluß

Siehe auch:Die Befehe JBC, JNB
Befehlsreferenz
Adressierungsmodi



JBC bit,<rel-addr>

Beschreibung: JBC verzweigt zum Sprungziel und löscht das angegebene bit, sofern das angegebene bit gesetzt ist. Das Sprungziel wird aus dem gegebenen vorzeichenbehafteten Offset und dem PC (nach Ausführung des Befehls) berechnet. Der Offset wird vom Assembler automatisch aus einer Zieladresse berechnet.
Falls die Anweisung auf ein Port-Bit angewendet wird, so werden die Ursprungsdaten aus dem Port-Latch und nicht vom Port-Pin gelesen.

Funktion:
PC := PC + 3
IF bit = 1 THEN
  bit := 0
  PC := PC + <rel-addr>

Zyklen:2

Flags:kein Einfluß

Siehe auch:Die Befehe JB, JNB
Befehlsreferenz
Adressierungsmodi



JC <rel-addr>

Beschreibung: JC verzweigt zum Sprungziel, sofern das Carry-Flag gesetzt ist. Das Sprungziel wird aus dem gegebenen vorzeichenbehafteten Offset und dem PC (nach Ausführung des Befehls) berechnet. Der Offset wird vom Assembler automatisch aus einer Zieladresse berechnet.

Funktion:
PC := PC + 2
IF C = 1 THEN
  PC := PC + <rel-addr>

Zyklen:2

Flags:kein Einfluß

Siehe auch:Die Befehe JNC, JB
Befehlsreferenz



JNB bit,<rel-addr>

Beschreibung: JNB verzweigt zum Sprungziel, sofern das angegebene bit nicht gesetzt ist. Das Sprungziel wird aus dem gegebenen vorzeichenbehafteten Offset und dem PC (nach Ausführung des Befehls) berechnet. Der Offset wird vom Assembler automatisch aus einer Zieladresse berechnet.

Funktion:
PC := PC + 3
IF bit = 0 THEN
  PC := PC + <rel-addr>

Zyklen:2

Flags:kein Einfluß

Siehe auch:Die Befehe JB, JNC
Befehlsreferenz
Adressierungsmodi



JNC <rel-addr>

Beschreibung: JNC verzweigt zum Sprungziel, sofern das Carry-Flag nicht gesetzt ist. Das Sprungziel wird aus dem gegebenen vorzeichenbehafteten Offset und dem PC (nach Ausführung des Befehls) berechnet. Der Offset wird vom Assembler automatisch aus einer Zieladresse berechnet.

Funktion:
PC := PC + 2
IF C = 0 THEN
  PC := PC + <rel-addr>

Zyklen:2

Flags:kein Einfluß

Siehe auch:Die Befehe JC, JNB
Befehlsreferenz



JMP @A+DPTR

Beschreibung: JMP @A+DPTR addiert den vorzeichenlosen 8-Bit-Wert im Akku zum DPTR und lädt das Ergebnis in den PC.

Funktion:PC := A + DPTR

Zyklen:2

Flags:kein Einfluß

Siehe auch:Die Befehe AJMP, LJMP
Befehlsreferenz



JZ <rel-addr>

Beschreibung: JZ verzweigt zum Sprungziel, sofern der Akkumulator-Inhalt Null ist. Das Sprungziel wird aus dem gegebenen vorzeichenbehafteten Offset und dem PC (nach Ausführung des Befehls) berechnet. Der Offset wird vom Assembler automatisch aus einer Zieladresse berechnet.

Funktion:
PC := PC + 2
IF A = 0 THEN
  PC := PC + <rel-addr>

Zyklen:2

Flags:kein Einfluß

Siehe auch:Die Befehe JNZ, CJNE
Befehlsreferenz



JNZ <rel-addr>

Beschreibung: JNZ verzweigt zum Sprungziel, sofern der Akkumulator-Inhalt ungleich Null ist. Das Sprungziel wird aus dem gegebenen vorzeichenbehafteten Offset und dem PC (nach Ausführung des Befehls) berechnet. Der Offset wird vom Assembler automatisch aus einer Zieladresse berechnet.

Funktion:
PC := PC + 2
IF A ¹ 0 THEN
  PC := PC + <rel-addr>

Zyklen:2

Flags:kein Einfluß

Siehe auch:Die Befehe JZ, CJNE
Befehlsreferenz



LCALL addr16

Beschreibung: LCALL ruft ein Unterprogramm an der angegebenen Adresse auf. Der Befehl inkrementiert den PC zweimal, um die Adresse der folgenden Anweisung zu erhalten, dann wird das 16-bit Ergebnis auf dem Stack abgelegt (LSB zuerst) und der Stackpointer zweimal inkrementiert. Dann wird der PC mit der angegebenen Zieladresse geladen.

Funktion:
PC := PC + 2
SP := SP + 1
(SP) := PC[7...0]
SP := SP + 1
(SP) := PC[15...8]
PC := addr16

Zyklen:2

Flags:kein Einfluß

Siehe auch:Der Befehl ACALL
Befehlsreferenz



LJMP addr16

Beschreibung: LJMP setzt die Programmausführung bei der angegebenen Adresse fort.

Funktion:PC := addr16

Zyklen:2

Flags:kein Einfluß

Siehe auch:Die Befehle AJMP, SJMP
Befehlsreferenz



MOV <dest>,<src>

Beschreibung: MOV kopiert den Inhalt von <src> nach <dest>.

Format:
MOV <dest-byte>,<src-byte>
MOV <dest-bit>,<src-bit>
MOV DPTR,#data16

Siehe auch:Die Befehle MOVC, MOVX
Befehlsreferenz



MOV <dest-byte>,<src-byte>

Beschreibung: MOV kopiert den Inhalt von <src-byte> nach <dest-byte>.

Funktion:<dest-byte> := <src-byte>

Format/Zyklen:
BefehlZyklen
MOV A,Rn1
MOV A,direct1
MOV A@Ri1
MOV A,#data1
MOV Rn,A1
MOV Rn,direct2
MOV Rn,#data1
MOV direct,A1
MOV direct,Rn2
MOV direct,direct2
MOV direct,@Ri2
MOV direct,#data2
MOV @Ri,A1
MOV @Ri,direct2
MOV @Ri,#data1

Flags:kein Einfluß

Siehe auch:Der Befehl MOV
Befehlsreferenz
Adressierungsmodi



MOV <dest-bit>,<src-bit>

Beschreibung: MOV kopiert den Inhalt von <src-bit> nach <dest-bit>.

Funktion:<dest-bit> := <src-bit>

Format/Zyklen:
BefehlZyklen
MOV C,bit1
MOV bit,C2

Flags:kein Einfluß

Siehe auch:Der Befehl MOV
Befehlsreferenz
Adressierungsmodi



MOV DPTR,#data16

Beschreibung: MOV DPTR,#data16 kopiert die 16-Bit-Konstante #data16 in das DPTR-Register.

Funktion:DPTR := data16

Zyklen:2

Flags:kein Einfluß

Siehe auch:Der Befehl MOV
Befehlsreferenz



MOVC A,@A+<basereg>

Beschreibung: MOVC kopiert ein Datenbyte aus dem Programmspeicher in den Akkumulator. Die Adresse ergibt sich aus der (vorzeichenlosen) Summe aus Akkumulator und <basereg>.

Funktion/Format:MOVC A,@A+DPTR
  A := (A + DPTR)

MOVC A,@A+PC
  PC := PC + 1
  A := (A + PC)

Zyklen:2

Flags:kein Einfluß

Siehe auch:Der Befehl MOVX
Befehlsreferenz



MOVX <dest-byte>,<src-byte>

Beschreibung: MOVX kopiert Daten zwischen dem Akkumulator und einem externen Datenspeicher. Es gibt zwei Adressierungmöglichkeiten:
Im ersten Fall liefert das Register R0 oder R1 eine 8-Bit-Adresse, die während des Schreib-/Lesezyklus gemultiplext mit den Daten an Port 0 ausgegeben wird.
Im zweiten Fall erzeugt liefert das DPTR-Register eine 16-Bit-Adresse, deren obere Hälfte auf Port 2 erscheint (nach dem Befehl liefert Port 2 wieder die Daten aus dem zugehörigen SFR).

Funktion:<dest-byte> := <src-byte>

Format:
MOVX A,@Ri
MOVX A,@DPTR
MOVX @Ri,A
MOVX @DPTR,A

Zyklen:2

Flags:kein Einfluß

Siehe auch:Der Befehl MOVC
Befehlsreferenz



MUL AB

Beschreibung: MUL AB multipliziert den vorzeichenlosen 8-Bit-Wert im Akku mit dem vorzeichenlosen 8-Bit-Wert im B-Register. Die untere Hälfte des Produkts kommt in den Akku, die obere ins Register B.

Zyklen:4

Flags:Carry wird gelöscht. OV wird gesetzt, falls das Produkt größer als 0FFh ist, ansonsten gelöscht.

Siehe auch:Der Befehl DIV
Befehlsreferenz



NOP

Beschreibung: NOP tut einen Zyklus lang gar nichts (abgesehen davon, daß der PC wie bei jedem anderen Befehl auch inkrementiert wird).

Zyklen:1

Flags:kein Einfluß

Siehe auch:Befehlsreferenz



ORL <dest>,<src>

Beschreibung: ORL führt eine ODER-Verknüpfung zwischen <dest> und <src> durch und speichert das Ergebnis in <dest>.

Format:
ORL <dest-byte>,<src-byte>
ORL C,<src-bit>

Siehe auch:Befehlsreferenz
Adressierungsmodi



ORL <dest-byte>,<src-byte>

Beschreibung: ORL führt eine bitweise ODER-Verknüpfung zwischen den angegebenen Variablen durch und speichert das Ergebnis in <dest-byte>. Wenn der Befehl verwendet wird, um einen Ausgangsport zu verändern, so wird der Wert für die Originaldaten des Ports aus dem Ausgabelatch gelesen, nicht von den Port-Pins.

Funktion:<dest-byte> := <dest-byte> Ú <src-byte>

Format:
ORL A,Rn
ORL A,direct
ORL A,@Ri
ORL A,#data
ORL direct,A
ORL direct,#data

Zyklen:
ORL direct,#data: 2
sonst:1

Flags:kein Einfluß

Siehe auch:Die Befehle ORL C,<src-bit>, ANL, XRL
Befehlsreferenz
Adressierungsmodi



ORL C,<src-bit>

Beschreibung: Ist <src-bit> gesetzt, so wird das Carry-Flag gesetzt. Ist <src-bit> nicht gesetzt, so bleibt das Carry-Flag unverändert.

Format/Funktion:
ORL C,bitC := C Ú bit
ORL C,/bitC := C Ú Øbit

Zyklen:2

Flags:kein Einfluß (außer Carry)

Siehe auch:Die Befehle ORL <dest-byte>,<src-byte>, ANL C,<src-bit>
Befehlsreferenz
Adressierungsmodi



POP direct

Beschreibung: Der Inhalt der internen RAM-Speicherzelle, die durch den Stapelzeiger SP adressiert wird, wird in das durch direct angegebene Byte kopiert. Danach wird SP um 1 vermindert.

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

Zyklen:2

Flags:kein Einfluß

Siehe auch:Der Befehl PUSH
Befehlsreferenz
Adressierungsmodi



PUSH direct

Beschreibung: Der Stapelzeiger SP wird um 1 erhöht. Dann wird das durch direct angegebene Byte in die interne RAM-Speicherzelle, die durch SP adressiert wird, kopiert.

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

Zyklen:2

Flags:kein Einfluß

Siehe auch:Der Befehl POP
Befehlsreferenz
Adressierungsmodi



RET

Beschreibung: Rückkehr aus einem Unterprogramm. Der Befehlszähler PC wird vom Stapel geholt und SP entsprechend vermindert. Dies bedeutet i.a., daß die Programmausführung mit der auf ACALL bzw. LCALL folgenden Anweisung fortgesetzt wird.

Funktion:
PC[15...8] := (SP)
SP := SP - 1
PC[7...0] := (SP)
SP := SP - 1

Zyklen:2

Flags:kein Einfluß

Siehe auch:Der Befehl RETI
Befehlsreferenz



RETI

Beschreibung: Rückkehr aus einem Interrupt-Routine. Der Befehlszähler PC wird vom Stapel geholt und SP entsprechend vermindert. Dies bedeutet, daß die Programmausführung mit der auf den Interrupt-Request folgenden Anweisung fortgesetzt wird. Weiterhin wird der Zustand der Interrupt-Logik wiederhergestellt, so daß nun ein weiterer Interrupt mit gleicher oder niedrigerer Priorität bearbeitet werden kann.

Funktion:
PC[15...8] := (SP)
SP := SP - 1
PC[7...0] := (SP)
SP := SP - 1

Zyklen:2

Flags:kein Einfluß

Siehe auch:Der Befehl RET
Befehlsreferenz



RL A

Beschreibung: Die acht Akkumulator-Bits werden um eine Position nach links rotiert. Hierbei kommt Bit 7 an die Position von Bit 0.

Funktion:
tmp := A[7]
A[7...1] := A[6...0]
A[0] := tmp

Zyklen:1

Flags:kein Einfluß

Siehe auch:Die Befehle RLC, RR, RRC
Befehlsreferenz



RLC A

Beschreibung: Die acht Akkumulator-Bits und das Carry-Flag werden um eine Position nach links rotiert. Hierbei kommt Bit 7 des Akkus ins Carry-Flag und der Inhalt des Carry-Flags an die Position von Bit 0.

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

Zyklen:1

Flags:kein Einfluß

Siehe auch:Die Befehle RL, RR, RRC
Befehlsreferenz



RR A

Beschreibung: Die acht Akkumulator-Bits werden um eine Position nach rechts rotiert. Hierbei kommt Bit 0 an die Position von Bit 7.

Funktion:
tmp := A[0]
A[6...0] := A[7...1]
A[7] := tmp

Zyklen:1

Flags:kein Einfluß

Siehe auch:Die Befehle RRC, RL, RLC
Befehlsreferenz



RRC A

Beschreibung: Die acht Akkumulator-Bits und das Carry-Flag werden um eine Position nach rechts rotiert. Hierbei kommt das Carry-Flag in Bit 7 des Akkus und Bit 0 ins Carry-Flag.

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

Zyklen:1

Flags:kein Einfluß

Siehe auch:Die Befehle RR, RL, RLC
Befehlsreferenz



SETB bit

Beschreibung: Das angegebene Bit wird gesetzt (mit 1 geladen).

Funktion:bit := 1

Format:bit kann jedes direkt adressierbare Bit oder C (Carry-Flag) sein.

Zyklen:1

Flags:kein Einfluß

Siehe auch:Der Befehl CLR bit
Befehlsreferenz
Adressierungsmodi



SJMP <rel-addr>

Beschreibung: SJMP springt zum angegebenen Sprungziel. Das Sprungziel wird aus dem gegebenen vorzeichenbehafteten Offset und dem PC (nach Ausführung des Befehls) berechnet. Der Offset wird vom Assembler automatisch aus einer Zieladresse berechnet.

Funktion:
PC := PC + 2
PC := PC + <rel-addr>

Zyklen:2

Flags:kein Einfluß

Siehe auch:Die Befehe AJMP, LJMP
Befehlsreferenz



SUBB A,<src-byte>

Beschreibung: SUBB subtrahiert die angegebene Byte-Variable und das Carry-Flag vom Akkumulator. Das Ergebnis kommt wieder in den Akkumulator.

Funktion:A := A - C - <src-byte>

Format:
SUBB A,Rn
SUBB A,direct
SUBB A,@Ri
SUBB A,#data

Zyklen:1

Flags:Carry bzw. Auxiliary-carry werden gesetzt, wenn ein Übertrag (Borrow) für Bit 7 bzw. Bit 3 stattfindet, andernfalls gelöscht.
OV wird gesetzt, wenn ein Übertrag für Bit 6, aber nicht für Bit 7 stattfindett oder umgekehrt ein Übertrag für Bit 7, aber nicht für Bit 6. Andernfalls wird OV zurückgesetzt. Bei der Subtraktion von vorzeichenbehafteten Zahlen zeigt OV an, daß ein negatives Ergebnis aus der Differenz einer positiven und einer negativen Zahl entstanden ist, oder ein positives Ergebnis aus der Differenz einer negativen und einer positiven Zahl.

Siehe auch:Der Befehl ADDC
Befehlsreferenz
Adressierungsmodi



SWAP A

Beschreibung: Das obere und das untere Akkumulator-Nibble (Halbbyte) werden vertauscht..

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

Zyklen:1

Flags:kein Einfluß

Siehe auch:Befehlsreferenz



XCH A,<byte>

Beschreibung: Der Inhalt des Akkumulators und des angegebenen <byte> werden vertauscht.

Funktion:A « <byte>

Format:
XCH A,Rn
XCH A,direct
XCH A,@Ri

Zyklen:1

Flags:kein Einfluß

Siehe auch:Der Befehl XCHD
Befehlsreferenz
Adressierungsmodi



XCHD A,@Ri

Beschreibung: Die untere Hälfte des Akkumulators und des durch Ri angegebenen Bytes werden vertauscht.

Funktion:A[3...0] « (Ri)[3...0]

Zyklen:1

Flags:kein Einfluß

Siehe auch:Der Befehl XCH
Befehlsreferenz



XRL <dest-byte>,<src-byte>

Beschreibung: XRL führt eine bitweise EXKLUSIV-ODER-Verknüpfung zwischen den angegebenen Variablen durch und speichert das Ergebnis in <dest-byte>. Wenn der Befehl verwendet wird, um einen Ausgangsport zu verändern, so wird der Wert für die Originaldaten des Ports aus dem Ausgabelatch gelesen, nicht von den Port-Pins.

Funktion:<dest-byte> := <dest-byte> xor <src-byte>

Format:
XRL A,Rn
XRL A,direct
XRL A,@Ri
XRL A,#data
XRL direct,A
XRL direct,#data

Zyklen:
XRL direct,#data: 2
sonst:1

Flags:kein Einfluß

Siehe auch:Die Befehle ANL, ORL
Befehlsreferenz
Adressierungsmodi



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 - Sprungziel nicht erreichbar (Offset zu groß)
Die gewünschte Zieladresse kann mit einem relativen Sprungbefehl (CJNE, JB, JBC, JC, JNB, JNC, JNZ, JZ, SJMP) nicht erreicht werden. Verwenden Sie stattdessen einen absoluten Sprung (AJMP).

E10073 - Sprungziel muß in der gleichen 2K-Seite liegen
Die gewünschte Zieladresse liegt außerhalb der aktuellen 2K-Seite. Verwenden Sie einen 16-Bit-Sprungbefehl (LCALL, LJMP).

E10074 - Dieses SFR ist bei dem gewählten Prozessor nicht verfügbar
Sie greifen auf ein SFR zu, das beim gewählten Prozessor nicht implementiert ist. Korrigieren Sie Ihren Code oder wählen Sie in den Assembleroptionen den richtigen Prozessor aus.

E10075 - Dieses SFR ist nicht Bit-adressierbar
Sie haben versucht, aus einem nicht bitweise adressierbaren SFR eine Bitadresse zu erzeugen (z.B. DPL.3).

E10076 - Dritter Parameter erwartet
Der verwendete Befehl erfordert einen dritten Parameter, es wurden aber nur zwei angegeben.

E10077 - MOV A,ACC ist keine gültige Anweisung
Dieser Befehl ist nicht zulässig und auch nicht sinnvoll.

E10078 - Diese Anweisung ist bei dem gewählten Prozessor nicht verfügbar
Der verwendete Befehl ist auf dem in den Assembleroptionen gewählten Prozessor nicht implementiert.

E10079 - RAM/SFR-Adresse ist bei dem gewählten Prozessor nicht verfügbar
Sie greifen auf ein SFR oder eine RAM-Adresse zu, das beim gewählten Prozessor nicht implementiert ist. Korrigieren Sie Ihren Code oder wählen Sie in den Assembleroptionen den richtigen Prozessor aus.