|
CJNE <Operand1>,<Operand2>,<rel>
Vergleiche und springe, wenn ungleich.
|
CJNE A,direct,rel |
|
direct = Adresse im unteren RAM oder SFR |
CJNE A,#data,rel |
|
#data = unmittelbare 8 Bit Konstante |
CJNE Rr,#data,rel |
|
Rr = Inhalt eines der Register R0 bis R7 |
CJNE @Ri,#data,rel |
|
@Ri = 8 Bit Adresse in R0 oder R1 |
|
CJNE vergleicht die Werte <Operand1> und <Operand2> und führt eine Programmverzweigung durch, wenn die Werte ungleich sind.
Relatives Sprungziel rel
Der Programmzähler wird zunächst auf den nächsten Befehl gesetzt (PC=PC+3). Sind die beiden Operanden ungleich, wird der Sprungwert rel zum Programmzähler hinzuaddiert (PC=PC+rel), welches den relativen Sprung zur Folge hat.
Der Sprungwert rel wird dabei als vorzeichenbehaftete Zahl interpretiert. So sind Sprünge von -128 Bytes (zurück) bzw. 127 Bytes (vor) möglich.
CY = 1
Das Übertragsbit wird gesetzt, wenn der vorzeichenlose, ganzzahlige <Operand1> kleiner ist als der vorzeichenlose, ganzzahlige <Operand2>. Andernfalls wird es gelöscht (CY=0).
Keiner der beiden Operanden wird verändert.
|
Der Akkumulator (A) enthalte 34H und Register R7 56H. Der erste Befehl
CJNE R7,#60H,MARKE1 ;Sprung, wenn R7 != 60H
... ;R7 = 60H
MARKE1 JC MARKE2 ;Sprung, wenn R7 < 60H
... ;R7 > 60H
bewirkt einen Sprung zu MARKE1, da Register R7 ungleich 60H ist. Gleichzeitig wird das Übertragsbit gesetzt (CY=1), da R7 kleiner als 60H ist. Somit bewirkt der Befehl JC einen Sprung zu MARKE2 (springe, wenn CY gleich Eins ist).
Wenn der an Port 1 liegende Wert ebenfalls 34H beträgt, löscht der Befehl
WAIT: CJNE A,P1,WAIT
das Übertragsbit (CY=0) und fährt mit dem nächsten Befehl fort, da der Akkumulatorinhalt gleich dem aus Port 1 gelesene Wert ist. Wenn irgendein anderer Wert an Port 1 liegt, geht das Programm an diesem Punkt in eine Warteschleife, bis der Wert 34H an Port 1 auftritt.
|
CJNE A,direct,rel
Springe, wenn der Akkumulator (A) und der Inhalt der Adresse (direct) ungleich sind.
direct = Adresse im unteren RAM oder SFR
Bytes: 3
Zyklen: 2
Befehlscodierung
|
CJNE A,#data,rel
Springe, wenn Akkumulator (A) ungleich #data ist.
#data = unmittelbare 8 Bit Konstante
Bytes: 3
Zyklen: 2
Befehlscodierung
|
CJNE Rr,#data,rel
Springe, wenn Register r ungleich #data ist.
Rr = R0 .. R7 der gewählten Registerbank
#data = unmittelbare 8 Bit Konstante
Bytes: 3
Zyklen: 2
Befehlscodierung
|
CJNE @Ri,#data,rel
Springe, wenn der Wert der Adresse, welche durch den Wert in Ri definiert ist, ungleich #data ist.
@Ri = 8 Bit Adresse in R0 oder R1
#data = unmittelbare 8 Bit Konstante
Bytes: 3
Zyklen: 2
Befehlscodierung
|
|





|
|