Verständnisbestätigung

OP #1665400
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?
Gast #1665410
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?
#1665412
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)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren