Frage zu Assembler-Befehl

Gast #1527708
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
Gast #1527779
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.

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