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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.