Forum: Mikrocontroller und Digitale Elektronik register-indirekte adressierung (assembler)


von Marcel (Gast)


Lesenswert?

guten abend,

hab morgen einen test in mikroprozessortechnik und versteh das nicht
mit dieser register indirekten adressierung. Ich schreib mal was ich
hier in meinen Mitschriften als Bsp. stehen hab:

mov r1,# 7bh   (konst.7bh in register 1 schreiben)
mov a, @ r1
nächstes bsp.

mov 10h, #9bh
mov r1, #10h
mov a,@ r1

ergebnis in a steht 9bh

bitte helft mir ich verzweifle hier. danke

von crazy horse (Gast)


Lesenswert?

ist gar nicht so schwer, und ist bei manchen Sachen eine verdammt
effektive Art, auf Daten zuzugreifen.
Im Prinzip ist es das gleiche Verfahren wie beim DPTR.
Du gibst im Befehl nicht die physikalische Adresse des Zieloperanden,
sondern sagst nur, wo die Adresse steht, auf die du zugreifen
möchtest.

mov r1, #10h
mov a,@ r1

Das sind die wichtigen Teile. Im ersten Befehl lädst du die Konstante
0x10 in Register 1, im zweiten Befehl greifst du lesend (mov a,xxx) auf
die Speicherstelle zu, die durch r1 addressiert wird. In dem Fall lädst
du also A mit dem Inhalt der Speicherzelle 0x10 (weil 0x10 in r1 steht,
welches als Adresszeiger benutzt wird)

von Stefan Kleinwort (Gast)


Lesenswert?

mov 10h, #9bh
In die Speicherstelle mit der Adressse 10h
wird der konstante Wert (# bedeutet konstant) 9Bhex geschrieben.

mov r1, #10h
In das Register R1 wird der konstante wert 10hex geschrieben.

mov a,@ r1
In A wird der Wert, auf den R1 zeigt, geladen (@ bedeutet: Register
wird als Adresse aufgefasst). R1 hat aus dem letzten Befehl den Wert
10hex, @R1 zeigt also auf die Speicherstelle mit der Adresse 10hex. Und
in der steht seit dem vorletzten Befehl 9Bhex.

Alles klar?

Stefan

von Sebastian (Gast)


Lesenswert?

Sers,

wo liegt denn genau das Problem? So wie ich das sehe, da wird in das
Register r1 7bh reingeschrieben. Dann wird in a der Inhalt
reingeschoben, der in der Speicherzelle mit der Adresse 7bh steht. Es
wird also nicht direkt in a der Wert geschoben.
Wenn das also indirekt ist, bekommst nu nen Zettel vom Chef wo der
Lagerplatz draufsteht und du das Teil von da holen sollst. Bei direkt
da gibt er dir gleich das Teil.

seb

von Sebastian (Gast)


Lesenswert?

Kewl gleich 3 mal. War wohl doch zu langsam. :-)

von Marcel (Gast)


Lesenswert?

vielen dank für eure schnelle und ausführliche antworten, wenn man es
verstanden hat ist es echt einfach.ist echt ein geiles forum hier.
jetzt kann ich ruhigen gewissens noch ein bierchen trinken.

von Stefan Kleinwort (Gast)


Lesenswert?

So wars eigendlich nicht gedacht.
Schon eher, dass Du uns jetzt auf eins einlädtst ...

Prost, Stefan

von Malte Löffler (Gast)


Lesenswert?

Hallo Leute, kann ich Irgendwie eine 16Bit Adresse Incrementieren oder 
Decrementieren? Ich weiß das man R0 und R1 zusammen benutzen kann. Kann 
mir da wer helfen?

von Georg (Gast)


Lesenswert?

Malte Löffler schrieb:
> Incrementieren oder
> Decrementieren? Ich weiß das man R0 und R1 zusammen benutzen kann.

Da müsste man allerdings wissen, welcher Prozessor - es könnte Inc und 
Dec Befehle geben, die direkt auf das Paar R1/R2 wirken.

Wenn nicht, musst du halt erst das Low Byte incrementieren, bei einem 
Übertrag (Carry) anschliessend das High Byte. Also etwa

   inc R1
   jnc Fertig   ; Jump if no Carry
   inc R2
Fertig:

Georg

von Sinus T. (micha_micha)


Lesenswert?

Sag mal, nach 10 (!!!) Jahren einen alten Thread ausgraben und dann mit 
einem völlig neuen Thema weiterführen? Was soll denn das?

von Georg (Gast)


Lesenswert?

Sinus Tangentus schrieb:
> Was soll denn das?

Vielleicht wartet Stefan immer noch auf sein Bier...

Hab ich auch übersehen.

Georg

von Rainer V. (rudi994)


Lesenswert?

...oder Stefan hat seinem Urenkel Malte erzählt, es habe früher in 
Web-Foren oft Freibier gegeben, und Malte will jetzt mit einem Umweg 
über ein Registerpaar an diese Tradition anknüpfen.

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.