|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Befehlsliste der 8051-MikrocontrollerAbkürzungen Befehlsübersicht BefehlsbeschreibungenBefehlsübersicht
|
Symbole |
Bedeutung |
A |
Akkumulator |
adr |
8 Bit-Adresse |
adr11 |
11 Bit-Adresse |
adr16 |
16 Bit-Adresse |
B |
B-Register |
bit |
Bitadresse (RAM: 00-7F; SFR: 80-FF) |
C |
Carrybit |
#data |
Konstante |
DPTR |
Datenzeiger (Datapointer) |
MZ |
MaschinenZyklus |
PC |
Programmzähler (Programm-Counter) |
rel |
Vorzeichenbehafteter 8 Bit-Offset für Sprungbefehle |
Ri |
Register R0 und R1 für registerindirekte Adressierung |
Rn |
Register R0 bis R7 für Registeradressierung |
WB |
Wortbreite des Befehls |
CY |
Carry-Flag |
OV |
Overflow (Überlauf)-Flag |
AC |
Hilfscarry-Flag für BCD-Addition (auxilliary) |
|
|
MOV Zielbyte,Quellbyte
(MOVe
data)
Der Mov-Befehl
dient zum Datentransport. Der erste Operand verweist Intel-like
immer immer auf das Transportziel, der zweite Operand auf die Datenquelle.
Die Datenquelle kann dabei eine Konstante, ein Register, eine RAM-Speicherstelle
(8-Bit-Adresse) oder das Carry-Flag sein. Viele Kombinationen sind
erlaubt. Konstanten werden mit # (Gartenzaun; Raute) bezeichnet.
@ (at) steht für eine registerindirekte Adressierung.
Mnemonic |
Operation |
Opcode |
WB |
MZ |
Flags |
||
mov A,Rn |
[A] <-- [Rn] (n=0...7) |
E8..EF |
1 |
1 |
x |
x |
x |
mov A,adr |
[A] <-- [adr] |
E5 |
2 |
1 |
x |
x |
x |
mov A,@Ri |
[A] <-- [[Ri]] (i=0;1) |
E6; E7 |
1 |
1 |
x |
x |
x |
mov A,#data |
[A] <-- #data |
74 |
2 |
1 |
x |
x |
x |
mov Rn,A |
[Rn] <-- [A] (n=0...7) |
F8..FF |
1 |
1 |
x |
x |
x |
mov Rn,adr |
[Rn] <-- [adr] (n=0...7) |
A8..AF |
2 |
2 |
x |
x |
x |
mov Rn,#data |
[Rn] <-- #data (n=0...7) |
78..7F |
2 |
1 |
x |
x |
x |
mov adr,A |
[adr] <-- [A] |
F5 |
2 |
1 |
x |
x |
x |
mov adr,Rn |
[adr] <-- [Rn] (n=0...7) |
88..8F |
2 |
2 |
x |
x |
x |
mov adr,adr |
[adr] <-- [adr] |
85 |
3 |
2 |
x |
x |
x |
mov adr,@Ri |
[adr] <-- [Ri] (i=0;1) |
86; 87 |
2 |
2 |
x |
x |
x |
mov adr,#data |
[adr] <-- #data |
75 |
3 |
2 |
x |
x |
x |
mov @Ri,A |
[[Ri]] <-- [A] (i=0;1) |
F6; F7 |
1 |
1 |
x |
x |
x |
mov @Ri,adr |
[[Ri]] <-- [adr] (i=0;1) |
A6; A7 |
2 |
2 |
x |
x |
x |
mov @Ri,#data |
[[Ri]] <-- #data (i=0;1) |
76; 77 |
2 |
1 |
x |
x |
x |
mov C,bit |
[C] <-- [bit] |
A2 |
2 |
1 |
|
x |
x |
mov bit,C |
[bit] <-- [C] |
92 |
2 |
2 |
x |
x |
x |
Bsp.: |
mov A,#6Fh |
; Die Hexzahl 6Fwird
in den Akku |
|
mov A,6Fh |
; Der Inhalt
der Speicherstelle mit der |
|
mov C,6Fh |
; Das Bit
mit der Bitadresse 6F wird |
|
mov 7Eh,@R0 |
; Der Inhalt der Speicherzelle,
deren |
PUSH Quellbyte
(PUSH onto stack)
Der Stapelzeiger (Stackpointer)
wird um 1 erhöht. Anschließend wird der Inhalt des Quellbyte
in die vom Stackpointer adressierte Speicherstelle kopiert.
Mnemonic |
Operation |
Opcode |
WB |
MZ |
Flags |
||
push adr |
[SP] <-- [SP] + 1 |
C0 |
2 |
2 |
x |
x |
x |
Bsp.: |
push acc |
; Der Akku wird in den Stapelspeicher ; geschrieben. (ACC = E0h) |
POP Zielbyte
(POP from stack)
Holt das oberste Datum vom Stapelspeicher
(Stack) und kopiert es iins Zielbyte. Anschließend wird der
Stapelzeiger um 1 erniedrigt.
Mnemonic |
Operation |
Opcode |
WB |
MZ |
Flags |
||
pop adr |
[adr] <-- [[SP]] |
D0 |
2 |
2 |
x |
x |
x |
Bsp.: |
pop acc |
; Der Akku wird wiederhergestellt. |
XCH A,Quellbyte
(eXCHange acumulator whit bytevariable)
Mit dem XCH-Befehl
wird der Akku mit einem Quellbyte ausgetauscht. Dieses Byte kann
direkt, register oder register indirekt adressiert sein.
Mnemonic |
Operation |
Opcode |
WB |
MZ |
Flags |
||
xch A,Rn |
[A] <--> [Rn] (n=0..7) |
C8-CF |
1 |
1 |
x |
x |
x |
xch A,adr |
[A] <--> [adr] |
C5 |
2 |
1 |
x |
x |
x |
xch A,@Ri |
[A] <--> [[Ri]] (i=0;1) |
C6; C7 |
1 |
1 |
x |
x |
x |
Bsp.: |
xch A,@R0 |
; Tausch den Inhalt
des Akkus mit |
XCHD
A,@Ri
(eXCHange Digit)
Mit dem XCHD-Befehl
(eXCHange Digit) wird das Low-Nibble (untere 4 Bit) des Akku mit
dem Low-Nibble des registerindirekt adressierten Speicherbytes ausgetauscht.
Mnemonic |
Operation |
Opcode |
WB |
MZ |
Flags |
||
xchd A,@Ri |
[A3-0] <--> [[Ri]3-0] (i=0;1) |
D6; D7 |
1 |
1 |
x |
x |
x |
Bsp.: |
xchd A,@R0 |
; Tausch das Low-Nibble
des Akkus |
MOVX Zielbyte,Quellbyte
(MOVe eXternal)
Der Movx-Befehl dient zum Transfer
von Daten zum bzw. vom eXternen RAM. Der Zugriff aufs eXterne RAM
erfolgt immer Registerindirekt. Dabei kann mit R0 oder R1 als 8-Bit-Adressregister
ein 256 Byte grosser Bereich adressiert werden. Port 0 wird dabei
als gemultiplexter Daten- und Adressbus verwendet. Mit dem Datenzeiger
(DPTR) als 16-Bit Adressregister kann der komplette 64 kByte grosse
eXterne Adressraum genutzt werden. Jedoch wird Port 2 als Adressbus
A8..A15 (MSB) benötigt
Mnemonic |
Operation |
Opcode |
WB |
MZ |
Flags |
||
movx A,@Ri |
[A] <-- [[Ri]] (i=0;1) |
E2; E3 |
1 |
2 |
x |
x |
x |
movx A,@DPTR |
[A] <-- [[DPTR]] |
E0 |
1 |
2 |
x |
x |
x |
movx @Ri,A |
[[Ri]] <-- [A] (i=0;1) |
F2; F3 |
1 |
2 |
x |
x |
x |
movx @DPTR,A |
[[DPTR]] <-- [A] |
F0 |
1 |
2 |
x |
x |
x |
Bsp.: |
mov DPTR,#23DAh |
; Liest die eXterne
Speicherstelle |
MOVC A,@A+Basisregister
(MOVe Code byte))
Der Movc-Befehl dient zum Lesen
von Daten aus dem Programmspeicher (Code). Die Datenquelle (=16-Bit
Adresse im Programmspeicher) wird gebildet durch den Inhalt eines
Basisregisters (DPTR oder PC) und eines Offsetwertes im Akku.
Mnemonic |
Operation |
Opcode |
WB |
MZ |
Flags |
||
movc A,@A+DPTR |
[A] <-- [[A] + [DPTR]] |
93 |
1 |
2 |
x |
x |
x |
movc A,@A+PC |
[PC] <-- [PC] + 1 |
83 |
1 |
2 |
x |
x |
x |
Bsp.: |
mov DPTR,#tabelle |
; Die Adresskonstante
"tabelle" wird |
|
tabelle: db 98,23,12 |
; Mit der
Assemblerdirektive db |
MOV
DPTR,#adr16
(Load datapointer
whit a 16-bit constant)
Mit dem Datenzeiger (DataPoinTeR)
wird auf eine 16 Bit-Adresse im eXtended RAM oder im Programmspeicher
verwiesen. Die Adresskonstante wird in zwei aufeinanderfolgenden
Zugriffen aus dem Programmspeicher geholt und im Datenzeiger (DPH
und DPL) abgelegt.
Mnemonic |
Operation |
Opcode |
WB |
MZ |
Flags |
||
mov DPTR,#adr16 |
[DPTR] <-- #data16 |
90 |
3 |
2 |
x |
x |
x |
Bsp.: |
mov DPTR,#E600h |
; Die Adresskonstante
E600h wird |
NOP
(No OPeration)
Der NOP-Befehl führt keine Operation durch. Er benötigt
aber einen Maschinenzyklus (MZ). Dadurch können kurze Wartezeiten
realisiert werden, z.B. um Schnittstellen-Timings einzuhalten.
Mnemonic |
Operation |
Opcode |
WB |
MZ |
Flags |
||
nop |
mache nichts |
00 |
1 |
1 |
x |
x |
x |
Bsp.: |
nop |
; nichts tun (t = 1 MZ) |
ADD A,Summand
(ADD)
Mnemonic |
Operation |
Opcode |
WB |
MZ |
Flags |
||
add A,Rn |
[A] <-- [A] + [Rn] (n = 0..7) |
28-2F |
1 |
1 |
|
|
|
add A,adr |
[A] <-- [A] + [adr] |
25 |
2 |
1 |
|
|
|
add A,@Ri |
[A] <-- [A] + [[Ri]] (i = 0; 1) |
26; 27 |
1 |
1 |
|
|
|
add A,#data |
[A] <-- [A] + #data |
24 |
2 |
1 |
|
|
|
Bsp.: |
|
; |
ADDC A,Summand
(ADD with Carry)
Mnemonic |
Operation |
Opcode |
WB |
MZ |
Flags |
||
addc A,Rn |
[A] <-- [A] + [C] + [Rn] |
38-3F |
1 |
1 |
|
|
|
addc A,adr |
[A] <-- [A] + [C] + [adr] |
35 |
2 |
1 |
|
|
|
addc A,@Ri |
[A] <-- [A] + [C] + [[Ri]] |
36; 37 |
1 |
1 |
|
|
|
addc A,#data |
[A] <-- [A] + [C] + #data |
34 |
2 |
1 |
|
|
|
Bsp.: |
|
; |
INC byte
(INCrement)
Mnemonic |
Operation |
Opcode |
WB |
MZ |
Flags |
||
inc A |
[A] <-- [A] + 1 |
04 |
1 |
1 |
x |
x |
x |
inc Rn |
[Rn] <-- [Rn] + 1 (n = 0..7) |
08-0F |
1 |
1 |
x |
x |
x |
inc adr |
[adr] <-- [adr] + 1 |
05 |
2 |
1 |
x |
x |
x |
inc @Ri |
[[Ri]] <-- [[Ri]] + 1 |
06; 07 |
1 |
1 |
x |
x |
x |
inc DPTR |
[DPTR] <-- [DPTR] + 1 |
A3 |
1 |
2 |
x |
x |
x |
Bsp.: |
mov R0,43h |
; |
DA
(Decimal Adjust)
Mnemonic |
Operation |
Opcode |
WB |
MZ |
Flags |
||
da |
wenn (([A3-0] > 9 v ([AC] = 1)) |
D4 |
1 |
1 |
|
x |
x |
Bsp.: |
add A,#99h |
; |
SUBB A,Subtrahend
(SUBtract with Borrow)
Mnemonic |
Operation |
Opcode |
WB |
MZ |
Flags |
||
subb A,Rn |
[A] <-- [A] - [C] - [Rn] |
98-9F |
1 |
1 |
|
|
|
subb A,adr |
[A] <-- [A] - [C] - [adr] |
95 |
2 |
1 |
|
|
|
subb A,@Ri |
[A] <-- [A] - [C] - [[Ri]] (i = 0;1) |
96; 97 |
1 |
1 |
|
|
|
subb A,#data |
[A] <-- [A] - [C] - #data |
94 |
2 |
1 |
|
|
|
Bsp.: |
subb A,R2 |
; |
DEC byte
(Decrement)
Mnemonic |
Operation |
Opcode |
WB |
MZ |
Flags |
||
dec A |
[A] <-- [A] - 1 |
14 |
1 |
1 |
x |
x |
x |
dec Rn |
[Rn] <-- [Rn] - 1 (n=0..7) |
18-1F |
1 |
1 |
x |
x |
x |
dec adr |
[adr] <-- [adr] - 1 |
15 |
2 |
1 |
x |
x |
x |
dec @Ri |
[[Ri]] <-- [[Ri]] - 1 (i=0;1) |
16-17 |
1 |
1 |
x |
x |
x |
Bsp.: |
|
; |
MUL AB
(MULtiply)
Mnemonic |
Operation |
Opcode |
WB |
MZ |
Flags |
||
mul AB |
[A] <-- [A] * [B] |
A4 |
1 |
4 |
|
|
x |
Bsp.: |
|
; |
DIV AB
(DIVide)
Mnemonic |
Operation |
Opcode |
WB |
MZ |
Flags |
||
div AB |
[A] <-- [A] / [B] |
84 |
1 |
4 |
|
|
x |
Bsp.: |
|
; |
CLR
(CLeaR)
Mnemonic |
Operation |
Opcode |
WB |
MZ |
Flags |
||
clr A |
[A] <-- 0 |
E4 |
1 |
1 |
x |
x |
x |
clr C |
[C] <-- 0 |
C3 |
1 |
1 |
0 |
x |
x |
clr bit |
[bit] <-- 0 |
C2 |
2 |
1 |
x |
x |
x |
Bsp.: |
clr P1.2 |
; |
SETB bit
(SET Bit)
Mnemonic |
Operation |
Opcode |
WB |
MZ |
Flags |
||
setb C |
[C] <-- 1 |
D3 |
1 |
1 |
1 |
x |
x |
setb bit |
[bit] <-- 1 |
D2 |
2 |
1 |
x |
x |
x |
Bsp.: |
setb C |
; |
CPL bit or byte
(ComPLement)
Mnemonic |
Operation |
Opcode |
WB |
MZ |
Flags |
||
cpl A |
[A] <-- /[A] |
F4 |
1 |
1 |
x |
x |
x |
cpl C |
[C] <-- /[C] |
B3 |
1 |
1 |
|
x |
x |
cpl bit |
[bit] <-- /[bit] |
B2 |
2 |
1 |
x |
x |
x |
Bsp.: |
setb P1.1 |
; |
RL A
(Rotate accumulator Left)
Mnemonic |
Operation |
Opcode |
WB |
MZ |
Flags |
||
rl A |
[An+1] <-- [An] (n=0...6) |
23 |
1 |
1 |
x |
x |
x |
Bsp.: |
|
; [A]
= 11000101b |
RLC A
(Rotate accumulator Left through Carry
flag)
Mnemonic |
Operation |
Opcode |
WB |
MZ |
Flags |
||
rlc A |
[An+1] <-- [An] (n=0...6) |
33 |
1 |
1 |
|
x |
x |
Bsp.: |
|
; [A]
= 11000101b [C] = 0 |
RR A
(Rotate accumulator Right)
Mnemonic |
Operation |
Opcode |
WB |
MZ |
Flags |
||
rr A |
[An] <-- [An+1] (n=0...6) |
03 |
1 |
1 |
x |
x |
x |
Bsp.: |
|
; [A]
= 11000101b |
RRC A
(Rotate accumulator Right through Carry
flag)
Mnemonic |
Operation |
Opcode |
WB |
MZ |
Flags |
||
rrc A |
[An] <-- [An+1] (n=0...6) |
13 |
1 |
1 |
|
x |
x |
Bsp.: |
|
; [A]
= 11000101b [C] = 0 |
SWAP A
(SWAP nibbles within the accumulator)
Mnemonic |
Operation |
Opcode |
WB |
MZ |
Flags |
||
swap A |
[A3-0] <--> [A7-4] |
C4 |
1 |
1 |
x |
x |
x |
Bsp.: |
|
; [A]
= 1010 0110 |
ANL Zielbyte,
Quellbyte
(ANd Logical)
Mnemonic |
Operation |
Opcode |
WB |
MZ |
Flags |
||
anl A,Rn |
[A] <-- [A] ^ [Rn] (n=0..7) |
58-5F |
1 |
1 |
x |
x |
x |
anl A,adr |
[A] <-- [A] ^ [adr] |
55 |
2 |
1 |
x |
x |
x |
anl A,@Ri |
[A] <-- [A] ^ [[Ri]] (i=0;1) |
56; 57 |
1 |
1 |
x |
x |
x |
anl A, #data |
[A] <-- [A] ^ #data |
44 |
2 |
1 |
x |
x |
x |
anl adr,A |
[adr] <-- [adr] ^ [A] |
52 |
2 |
1 |
x |
x |
x |
anl adr,#data |
[adr] <-- [adr] ^ #data |
53 |
3 |
2 |
x |
x |
x |
anl C,bit |
[C] <-- [C] ^ [bit] |
82 |
2 |
2 |
|
x |
x |
anl C,/bit |
[C] <-- [C] ^ /[bit] |
B0 |
2 |
2 |
|
x |
x |
Bsp.: |
|
; [A]
= 11011011 |
ORL Ziellbyte,Quellbyte
(OR Logical)
Mnemonic |
Operation |
Opcode |
WB |
MZ |
Flags |
||
orl A,Rn |
[A] <-- [A] v [Rn] (n=0..7) |
48-4F |
1 |
1 |
x |
x |
x |
orl A,adr |
[A] <-- [A] v [adr] |
45 |
2 |
1 |
x |
x |
x |
orl A,@Ri |
[A] <-- [A] v [[Ri]] (i=0;1) |
46; 47 |
1 |
1 |
x |
x |
x |
orl A,#data |
[A] <-- [A] v #data |
44 |
2 |
1 |
x |
x |
x |
orl adr,A |
[adr] <-- [adr] v [A] |
42 |
2 |
1 |
x |
x |
x |
orl adr,#data |
[adr] <-- [adr] v #data |
43 |
3 |
2 |
x |
x |
x |
orl C,bit |
[C] <-- [C] v [bit] |
72 |
2 |
2 |
|
x |
x |
orl C,/bit |
[C] <-- [C] v /[bit] |
A0 |
2 |
2 |
|
x |
x |
Bsp.: |
|
; [A]
= 11011011 |
XRL Zielbyte,Quellbyte
(eXclusive oR Logical)
Mnemonic |
Operation |
Opcode |
WB |
MZ |
Flags |
||
xrl A,Rn |
[A] <-- [A] xor [Rn] (n=0..7) |
68-6F |
1 |
1 |
x |
x |
x |
xrl A,adr |
[A] <-- [A] xor [adr] |
65 |
2 |
1 |
x |
x |
x |
xrl A,@Ri |
[A] <-- [A] xor [[Ri]] (i=0;1) |
66; 67 |
1 |
1 |
x |
x |
x |
xrl A,#data |
[A] <-- [A] xor #data |
64 |
2 |
1 |
x |
x |
x |
xrl adr,A |
[adr] <-- [adr] xor [A] |
62 |
2 |
1 |
x |
x |
x |
xrl adr,#data |
[adr] <-- [adr] xor #data |
63 |
3 |
2 |
x |
x |
x |
Bsp.: |
|
; [A]
= 11011011 |
ACALL adr11
(Absolut CALL)
Führt einen Unterprogrammaufruf
im aktuellen 2k-Codesegment durch. Das Codesegment 0-31 wird bestimmt
durch die höherwertigen 5 Bits des Programmzählers. Die
Adressbits A8,A9und A10 sind im Highnibble des Opcdes codiert. Der
Befehl benötigt daher nur 2 Byte.
Mnemonic |
Operation |
Opcode |
WB |
MZ |
Flags |
||
acall adr11 |
[PC] <-- [PC] + 2 |
11 |
2 |
2 |
x |
x |
x |
Bsp.: |
acall subrtn |
; Aufruf des Unterprogramms subrtn |
LCALL adr16
(Long CALL)
Führt einen Unterprogrammaufruf
im gesamten 64k-Codesegment durch.
Mnemonic |
Operation |
Opcode |
WB |
MZ |
Flags |
||
lcall adr16 |
[PC] <-- [PC] + 3 |
12 |
3 |
2 |
x |
x |
x |
Bsp.: |
lcall subrtn |
; Aufruf des Unterprogramms subrtn |
RET
(RETurn from
Subroutine)
Holt nacheinander das Highbyte und das Lowbyte der
Rücksprungadresse aus einem Unterprogramm vom Stack. Der Stackpointer
wird dabei um 2 erniedrigt. Das Programm wird dann von dieser Adresse
aus fortgesetzt. Der RET-Befehl folgt immer auf einen LCALL oder
ACALL.
Mnemonic |
Operation |
Opcode |
WB |
MZ |
Flags |
||
ret |
[PC15-8] <-- [[SP]] |
22 |
1 |
2 |
x |
x |
x |
Bsp.: |
UP: mov P1,A |
; |
AJMP adr11
(Absolute JuMP)
Führt einen Sprung
im aktuellen 2k-Codesegment durch. Das Codesegment 0-31 wird bestimmt
durch die höherwertigen 5 Bits des Programmzählers. Die
Adressbits A8,A9und A10 sind im Highnibble des Opcdes codiert. Der
Befehl benötigt daher nur 2 Byte.
Mnemonic |
Operation |
Opcode |
WB |
MZ |
Flags |
||
ajmp adr11 |
[PC] <-- [PC] + 2 |
01 |
2 |
2 |
x |
x |
x |
Bsp.: |
ajmp 23F8h |
; Das Programm verzweigt
zur |
LJMP adr16
(Long JuMP)
Mnemonic |
Operation |
Opcode |
WB |
MZ |
Flags |
||
ljmp adr16 |
[PC] <-- adr16 |
02 |
3 |
2 |
x |
x |
x |
Bsp.: |
|
; |
SJMP rel
(Short JuMP)
Mnemonic |
Operation |
Opcode |
WB |
MZ |
Flags |
||
sjmp rel |
[PC] <-- [PC] + 2 |
80 |
2 |
2 |
x |
x |
x |
Bsp.: |
|
; |
JMP @A+DPTR
(JuMP indirect)
Mnemonic |
Operation |
Opcode |
WB |
MZ |
Flags |
||
jmp @A+DPTR |
[PC] <-- [A] + [DPTR] |
73 |
1 |
2 |
x |
x |
x |
Bsp.: |
|
; |
JZ rel
/ JNZ rel
(Jump if
Akku is (Not) Zero)
Mnemonic |
Operation |
Opcode |
WB |
MZ |
Flags |
||
jz rel |
[PC] <-- [PC] + 2 |
60 |
2 |
2 |
x |
x |
x |
jnz rel |
[PC] <-- [PC] + 2 |
70 |
2 |
2 |
x |
x |
x |
Bsp.: |
|
; |
JC rel / JNC
rel
(Jump if Carry
is (Not) set)
Mnemonic |
Operation |
Opcode |
WB |
MZ |
Flags |
||
jc rel |
[PC] <-- [PC] + 2 |
40 |
2 |
2 |
x |
x |
x |
jnc rel |
[PC] <-- [PC] + 2 |
50 |
2 |
2 |
x |
x |
x |
Bsp.: |
|
; |
JB bit,rel /
JNB bit,rel
(Jump if
Bit is (Not) set)
Mnemonic |
Operation |
Opcode |
WB |
MZ |
Flags |
||
jb bit,rel |
[PC] <-- [PC] + 3 |
20 |
3 |
2 |
x |
x |
x |
jnb bit,rel |
[PC] <-- [PC] + 3 |
30 |
3 |
2 |
x |
x |
x |
Bsp.: |
|
; |
JBC bit,rel
(Jump if Bit is set and Clear bit)
Mnemonic |
Operation |
Opcode |
WB |
MZ |
Flags |
||
jbc bit,rel |
[PC] <-- [PC] + 3 |
10 |
3 |
2 |
x |
x |
x |
Bsp.: |
|
; |
CJNE Zielbyte,Quellbyte,rel
(Compare and Jump if Not Equal)
Vergleicht das Zielbyte mit dem Quellbyte und springt bei Ungleichheit
(!=) auf das angegebene relative Sprungziel. Dort kann eine weitere
Überprüfung auf kleiner als und größer
gleich (>) mit JC (<), bzw. JNC (>=) erfolgen.
Mnemonic |
Operation |
Opcode |
WB |
MZ |
Flags |
||
cjne A,adr,rel |
[PC] <-- [PC] + 3 |
B5 |
3 |
2 |
|
x |
x |
cjne A,#data,rel |
[PC] <-- [PC] + 3 |
B4 |
3 |
2 |
|
x |
x |
cjne Rn,#data,rel |
[PC] <-- [PC] + 3 |
B8..BF |
3 |
2 |
|
x |
x |
cjne @Ri,#data,rel |
[PC] <-- [PC] + 3 |
B6; B7 |
3 |
2 |
|
x |
x |
Bsp.: |
cjne
a,00h,Ungleich weiter: .... |
; Vergleicht den Inhalt
von Akku |
DJNZ byte,rel
(Decrement and Jump if Not Zero)
Mnemonic |
Operation |
Opcode |
WB |
MZ |
Flags |
||
djnz Rn,rel |
[PC] <-- [PC] + 2 |
D8..DF |
2 |
2 |
x |
x |
x |
djnz adr,rel |
[PC] <-- [PC] + 2 |
D5 |
3 |
2 |
x |
x |
x |
Bsp.: |
mov
R2,#8 |
; Port 1.7 wird 8 mal getoggelt |
RETI
(RETurn from
Interrupt)
Holt nacheinander das Highbyte und das Lowbyte
der Rücksprungadresse vom Stack. Der Stackpointer wird dabei
um 2 erniedrigt. Gleichzeitig wird die Interruptlogik zurückgesetzt,
so dass Interrupts der gleichen Prioritätsebene wieder zugelassen
sind. Das Programm wird an der nächsten resultierenden Adresse
fortgesetzt, die auf die Anweisung folgt, an der der Interrupt angefordert
wurde.
Mnemonic |
Operation |
Opcode |
WB |
MZ |
Flags |
||
reti |
[PC15-8] <-- [[SP]] |
32 |
1 |
2 |
x |
x |
x |
Bsp.: |
|
; |
31.10.2005 |