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

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.