register-indirekte adressierung (assembler)

Gast #122558
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
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
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
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
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 #3782101
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?
Gast #3782119
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

Eine eigene Frage? Dieser Thread ist über 22 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.