register-indirekte adressierung (assembler)

Gast #122558
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
Gast #122559
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)
Gast #122560
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
Gast #122561
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
Gast #122563
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.
Gast #3782119
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

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