www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Brne Sprungziel


Autor: Lukas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

dec r16
Brne Sprungziel
ldi r17, 0xFF

also, in der hilfe von AVR studio steht, für BRNE volgendes:

Cycles: 1 if condition is false

 2 if condition is true

wenn nun also r16 0 ist, dann springt er nicht, das heiß, es wurden 2
taktzyklen "verbraucht" !?!
und wenn r16 NICHT 0 ist, springt er zum sprungziel und braucht nur 1
taktzyklus? ist dsa umgekehrt nicht logischer? oder stimmt das so?

danke für die Hilfe!

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich sag mal, dass ist falsch interpretiert. Sehr wahrscheinlich (tm)
braucht es zwei Zyklen, wenn es springt.

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

IST doch auch umgekehrt, als logischer... ;-)

Branch if NOT Equal, ist also 'True'(=wahr), wenn NICHT 0.
Der Sprung wird dann ausgeführt, wenn die Bedingung WAHR also 'TRUE'
ist, und das ist sie, wenn NOT Equal(=zero), also NICHT Null.

True  = (<>0) = Sprung = 2Zyklen.
False = (=0) = kein Sprung = 1 Zyklus

Alles klar? :-)

Gruß,
Andi

Autor: Lukas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
jo, dank!

Autor: Christoph Kessler (db1uq) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es geht doch um eine Abfrage des "Zero-Flag", das bei einer
Vergleichsoperation auf 1 gesetzt wird, wenn das Ergebnis gleich Null
war.

Autor: Lukas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
öhm ja, warum?

Autor: daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
so wie ich dass verstehe. Werten die BRNE und BREQ das Z-Flag aus im
Register SREG aus. BRNE setzt den Programmcounter mit der
Sprungmarke(durch Assembler eine Adresse) bei Z=0 fort. Bei BREQ
erfolgt das bei Z=1. (vgl. Datasheet Atmel Instruction Set)
Das Z-Flag wird immer nur dann Z=1, wenn das Ergebnis einer Operation
(Vergleich,inc,dec...) gleich 0 ist.
So lassen sich die Befehle BRNE, BREQ vielfältig einsetzen in
Verbindung mit den vorhergehenden Operationen.

daniel

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da hast du recht. Allerdings ist diese Erkenntnis nicht gerade neu.

Autor: Olaf K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Als ich bei AVR-Assembler einstieg, haben mich die "BRNE" und
"BREQ"-Befehle auch etwas gewundert. In anderen Assembler-Dialekten
gibts dafür sowas wie "BRNZ" für "Branch if not Zero" und "BRZ"
für "Branch if Zero", man könnte auch "BRZC" und "BRZS" für
"Branch if Zero Cleared" bzw. "..Set" nehmen.
Beim Carry-Flag gibts bei AVR ja auch mehrere Mnemonics für einen
Opcode (z.B. BRSH und BRCC sind identisch), warum wurde das nicht auch
beim Zero-Flag so gemacht?
Naja, ist letztlich nur eine Gewöhnungssache. Und wenn man sich nicht
gewöhnen will, kann man sich ja passende Makros basteln.

MfG Olaf

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> warum wurde das nicht auch beim Zero-Flag so gemacht?

Naja, es gibt ja noch die allgemeine Flagabfrage mit BRBC und BRBS.
Alle anderen BRxx sind nur zusätzliche Mnemonics dazu, haben also
keinen eigenen Opcode.

...

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> ...warum wurde das nicht auch beim Zero-Flag so gemacht?

Vorstellbarer Grund dafür dürfte sein, dass die branch-Befehle
wahrscheinlich in den meisten Fällen in Verbindung mit compare-Befehlen
(cp, cpi) verwendet werden. Und da ist der Code sicher leichter
nachvollziehbar (lesbar), wenn nach einem Vergleich mit einem Befehl
abgefragt werden kann, ob die Werte gleich waren oder nicht. Ob das
Ergebnis der (implizit durchgeführten) Differenzbildung der
Vergleichswerte 0 ist oder nicht, ist zwar prinzipiell exakt dieselbe
Fragestellung, leuchtet aber nicht auf Anhieb so ein. Möglicherweise
haben die ATMEL-Ingenieure sich das genauso gedacht. Sicher, man kann
das auch anders sehen, wenn man eher branch-Befehle nach anderen
arithmetischen Operationen anwendet, aber dann kann man sich immer noch
mit brbc oder brbs behelfen...

Autor: Lukas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
öhm, ich will ja nichts sagen, aber meine frage ist geklärt und ich weiß
jetzt wie es geht! aber ihr könnt natürlich gerne noch weiter
diskutieren! :-)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.