www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Verständnisbestätigung


Autor: Dennis Brenzel (danrulz81)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

Habe ich diese Schleife richtig verstanden?
wait:      ldi     r17, 10           
wait0:     ldi     r18, 0            
wait1:     ldi     r19, 0            
wait2:     dec     r19
           brne    wait2
           dec     r18
           brne    wait1
           dec     r17
           brne    wait0

Also r19 ist ja 0. Durch "dec" wird es -1, wodurch das Zeroflag nicht 
gesetz wird (0-1=-1). Dadurch springt er ja wieder an wait2. Das macht 
er so lange, bis r19 wieder 0 wird (erzeugt einen Überlauf, oder 
nicht?). Das selbe dann mit r18, jedoch immer wieder r19 zwischen -1 bei 
r18. usw. Stimmt das so?

Autor: Markus E. (engelmarkus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja. Wobei du statt -1 auch 255 nehmen kannst :) . Das wird glaub ich zum 
Überlegen noch leichter.

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, hast Du richtig verstanden.  Insgesamt wird
(10 * 256 * 256)mal
 geschleift.

Autor: AVRuser (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

> Habe ich diese Schleife richtig verstanden?

Im Prinzip schon.
Beim Dekrementieren von Null wird der Wert nicht -1, sondern 255; bei 
Bytes gibt es kein Vorzeichen. Aber sonst ist es richtig.

Und wozu man eine solche Schleife verwendet, ist auch klar?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dennis Brenzel schrieb:

> Also r19 ist ja 0. Durch "dec" wird es -1,

Im Prinzip ja.
Aber du solltest dir angewöhnen, dass in Assembler die Dinge, sofern 
nichts anderes bekannt ist, alle unsigned sind. In diesem Sinne ergibt 0 
- 1 nicht -1, sonderm 255

> Das macht
> er so lange, bis r19 wieder 0 wird (erzeugt einen Überlauf, oder
> nicht?

Wenn schon, dann Unterlauf. Du fällst 'unten' an der Zahlengeraden 
0..255 raus

> r18. usw. Stimmt das so?

Es gibt ein tolles Werkzeug, mit dem du sich selbst kontrollieren 
kannst. AVR-Studio, den Simulator. Der wird über das Debug Menü 
gestartet. Mit F10 macht man einen einzelnen Schritt. Mit F9 kannst du 
einen Breakpoint an eine beliebige Stelle setzen. Wenn du dann das 
Programm mit F5 weiter laufen lässt, dann simuliert der Simulator die 
Programmausführung im Hintergrund weiter und meldet sich wieder, wenn er 
auf einen Breakpoint aufläuft (dann tippt man sich nicht mit F10 die 
Finger wund)

Autor: Dennis Brenzel (danrulz81)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gut, dann bin ich wieder n Stück weiter. Danke euch.

>Ja. Wobei du statt -1 auch 255 nehmen kannst :) . Das wird glaub ich zum
>Überlegen noch leichter.

Wobei ich dann die Register vorher mit 255 beschreiben müsste.

Autor: Markus E. (engelmarkus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein, ich meinte eigentlich dasselbe wie die anderen, nämlich dass ein 
Register mit 0 dekrementiert danach 255 enthält :) .

Autor: Dennis Brenzel (danrulz81)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ah, o.k. Wieder was gelernt.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dennis Brenzel schrieb:
> Ah, o.k. Wieder was gelernt.

Ob man ein bestimmtes Bitmuster als -1 oder als 255 ansieht, ist eine 
Frage der Interpretation. Beide Zahlen haben das gleiche Bitmuster bei 8 
Bit. Dem Bitmuster sieht man nicht an, ob es mit Vorzeichen oder ohne 
gelesen werden will.

Autor: Dennis Brenzel (danrulz81)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Klar, ich wusste nur nicht, dass ich es auch als 255 ansehen kann.

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.