Forum: Mikrocontroller und Digitale Elektronik Frage zu Assembler-Befehl


von Stefan (Gast)


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

von Stefan B. (Gast)


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.

von Stefan B. (Gast)


Lesenswert?

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

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.