Forum: Mikrocontroller und Digitale Elektronik Verständnisbestätigung


von Dennis B. (danrulz81)


Lesenswert?

Hallo zusammen,

Habe ich diese Schleife richtig verstanden?
1
wait:      ldi     r17, 10           
2
wait0:     ldi     r18, 0            
3
wait1:     ldi     r19, 0            
4
wait2:     dec     r19
5
           brne    wait2
6
           dec     r18
7
           brne    wait1
8
           dec     r17
9
           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?

von Markus E. (engelmarkus)


Lesenswert?

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

von Hc Z. (mizch)


Lesenswert?

Ja, hast Du richtig verstanden.  Insgesamt wird
1
(10 * 256 * 256)mal
 geschleift.

von AVRuser (Gast)


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?

von Karl H. (kbuchegg)


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)

von Dennis B. (danrulz81)


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.

von Markus E. (engelmarkus)


Lesenswert?

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

von Dennis B. (danrulz81)


Lesenswert?

Ah, o.k. Wieder was gelernt.

von Karl H. (kbuchegg)


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.

von Dennis B. (danrulz81)


Lesenswert?

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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.