Forum: Mikrocontroller und Digitale Elektronik Assembler indirekte Adressierung


von Eska (Gast)


Lesenswert?

Guten Tag,

Ich bräuchte ein bisschen "Nachhilfe".

Ich hab eine Aufgabe die wohl ganz trivial ist aber ich nicht so auf die 
Reihe bekomme:

- Gegeben sind die Konstanten zahl1 = 3 und zahl2 = 6

- Die zahl1 soll in den kompletten RAM-Adressbreich
von 0x150 abwärts bis 0x120 geschrieben werden.
Beginnend mit der Adresse 0x150.

- Jetzt soll die zahl2 an jede dritte Adresse beginnend
mit 0x160 bis maximal 0x180 geschrieben werden.
Hierfür verwenden Sie den indirekten Adressierungs-
Modus.

Also das mit den Adressbereich von 150 - 120 zu kopieren bekomme ich 
einfach nicht hin.

Ich hab mir überlegt, mit
lfsr   FSR1,0x150
erstmal einen Pointer zu erstellen.
dann möchte ich ihn im "loop" 30x mal dekrementieren und dabei die Zahl1 
jedesmal in die adresse reinschreiben.

Ich bräuchte dabei wirklich hilfe, wie ich das bewerkstelligen soll.

von Sascha W. (sascha-w)


Lesenswert?

Hallo,

vielleicht solltest du uns mal verraten, von welchem Prozessor / welcher 
Prozessorfamilie du ausgehst. Die Befehle zur indirekten Addressierung 
sind in ihrer Syntax doch unterschiedlich.

Sascha

von Eska (Gast)


Lesenswert?

von einem PIC18F4525 Microcontroller =)

von Sascha W. (sascha-w)


Lesenswert?

nun gut mit dem PIC kenne ich mich nun gerade nicht aus, was du brauchst 
nennt sich <Indirekte Adressierung>.
Such einfach mal bei G.. nach "pic indirekte adressierung" und du wirst 
genügend Futter finden.

Sascha

von Eska (Gast)


Lesenswert?

Nunja ist ja nicht so, dass ich schon gesucht hätte ;-)

Es ist mir einfach nicht verständlich, wie ich eine konstante wie ich 
sie z.b. bei movlw (eine Zahl ins W-Register schreiben) verwende, in die 
Adresse des Pointers reinschreiben soll.

ich hab es schon mit movff versucht und alles aber beim "File Register" 
wird nichts angezeigt.

was für ein befehl brauch ich denn, damit ich einfach die zahl1 in die 
adresse reinschreiben kann auf die der pointer gerade zeigt?

von Karl H. (kbuchegg)


Lesenswert?

Eska schrieb:
> Nunja ist ja nicht so, dass ich schon gesucht hätte ;-)

Komisch. Ich hab mit Google in weniger als 15 Sekunden diesen Link hier 
gefunden. War gleich der allererste

http://www.pictutorials.com/Indirect_Addressing_Exam.htm

von Jürgen D. (poster)


Lesenswert?

Mit
movwf postinc1
schreibst du ja schon mal den Inhalt vom W in das indirekt adressierte 
Register und erhöst automatisch den Zeiger.

Jetzt must du nur noch eine Schleife Programmieren können.

Edit grade gesehen du solst das von oben herrab machen, dafür oh wunder 
gibt es postdec1

von Eska (Gast)


Lesenswert?

ok hab es hinbekommen :D

hier der code:

variablen:
ZAHL1  equ  D'3'
ZAHL2  equ  D'6'
counter  equ  0x100



main:
  movlb  0x01
  lfsr  1,0x150
  movlw  D'49'
  movwf  counter
  movlw  ZAHL1

loop:
  movwf  POSTDEC1
  decfsz  counter
  goto  loop

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.