schüler schrieb:
> Aber er springt ja wenn die Bedingung nicht erfüllt ist.
>
> Also wenn Null - nicht springen - 1 Takt
> Wenn nicht Null - springen - 2 Takte
>
> so richtig??
Jain.
Er springt, wenn die Bedingung erfüllt ist. Die Bedingung ist 'nicht
null' (bzw. not equal)
Also springt er, wenn nicht null.
BRNE bedeutet 'Branch if not equal' und leitet sich aus einem Vergleich
(CP, CPI - compare) ab.
Dort werden zwei Werte subtrahiert. Sind beide gleich groß, ist das
Ergebnis 0 und damit wird das Z-Flag gesetzt.
Also, wenn Z gesetzt, Zahlen gleich, equal.
In einer Zählschleife ist beim letzten Durchlauf die Variable bei 0
angelangt und das Z-Flag wird gesetzt. Equal.
Solange das aber noch nicht so ist willst Du springen.
Also springe bei ungleich. BRNE.
Ich mag da ja auch die 8051 Befehle lieber:
JZ Jump if Z
JNZ Jump if not Z
JC Jump if C
JNC Jump if not C
Da sieht man direkt was man macht und muss nicht noch um eine Ecke
denken.
Warum schaust Du eigentlich nicht einfach in das Instruction Set Manual?
Dort steht es so schön:
Cycles: 1 if condition is false
2 if condition is true
Gruß
Jobst