www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Frage zu Assembler-Befehl


Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi zusammen,
hab ne Frage zu zwei Zeilen des Programms einer Übungsaufgabe aus einem 
Assembler-Buch.

Aufgabe:

Die Berechnung der Summe einer Zahlenserie (z.B. 1,2,3,4,5) soll 
durchgeführt werden. Die Länge der Serie steht in ADR 31H (z.B. 05H) und 
die Serie selbst beginnt ab Speicherstelle ADR 32H. Das Ergebnis soll in 
ADR 30H abgelegt werden.

Lösung im Buch:

     MOV   A,#00H          ; Setze Akku auf den Wert null
     MOV   R0,31H          ; Lade Serienlänge (z.B. 05H) in Register R0
     MOV   R1,#32H         ; Lade Wert 32H in Register R1

M1:  ADD   A,@R1           ; Addiere Inhalt d. ADR in R1 mit Akkuinhalt
     MOV   30H,A           ; Ergebnisspeicherung
     INC   R1              ; Erhöhe R1 um 1 (nächste Zahl der Serie)
     DJNZ  R0,M1           ; Verringere R0 um 1 (z.B. auf 04H) und 
springe
                           ; zu M1, wenn ergebnis nicht null ist


Meine Frage: Kann ich in Zeile 3 anstelle des Wertes 32H auch die ADR 
32H ins register R1 laden, wenn ich dann in Zeile 4 das "@" weglasse?

Etwa so:

     ...
     MOV   R1,32H          ; Lade Wert aus ADR 32H in Register R1

M1:  ADD   A,R1            ; Addiere Wert aus Register R1 mit Akkuinhalt
     ...


Danke schon mal für die Antwort!
Stefan

Autor: Stefan B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nee.

In der Schleife ab Marke M1 wird R1 als Zeiger auf einen Speicherbereich 
benutzt und es werden durch Erhöhen von R1 und anschliessenden Zugriff 
über @R1 immer Werte aus der nächsten Speicheradresse aufaddiert.

Bei deiner Lösung würde der anfangs aus dem Speicheradresse gelesene 
Wert um eins erhöht und dann aufaddiert. An die anderen Werte im 
Speicherbereich kommst du so nie dran.

Autor: Stefan B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Korrektur im letzten Absatz: aufaddiert und dann um eins erhöht 
natürlich

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.