Forum: Mikrocontroller und Digitale Elektronik c167 assembler,pointer


von joe.M (Gast)


Lesenswert?

Hallo, hab da ein verständnisproblem mit pointer

mov R0, [R1]        ;RAM ->REG
Dies bedeutet doch
Ram-Inhalt von R1 via Pointer nach R0
oder?
Wenn ich nun den Inhalt von R1 ändere ändert sich dann auch der inhalt 
von R0?

zudem ist mir auch folgender ausdruck unklar!

mov [R2], [R3]  ;RAM->RAM


gruß Joe.M

von bitte löschen (Gast)


Lesenswert?

Ich kenne zwar diesen Assembler nicht, aber die []-Notation für die 
Benutzung von Registern als Zeiger kenne ich noch vom 8086.

joe.M schrieb:
> RAM-Inhalt von R1 via Pointer nach R0
Vielleicht etwas ungeschickt ausgedrückt, da ein Register in gewisser 
Weise auch als RAM bezeichnet werden kann, und der "RAM-Inhalt von R1" 
etwas anderes wäre, als Du hier meinst. Anders ausgedrückt:
"Der Inhalt des RAMs, auf den R1 als Zeiger ausgewertet zeigt, nach R0."

joe.M schrieb:
> Wenn ich nun den Inhalt von R1 ändere ändert sich dann auch der Inhalt
> von R0?

Nein. In dem Register wird eine Kopie des Wertes aus dem RAM abgelegt. 
Wenn danach die Original-Speicherstelle verändert wird, wirkt sich das 
nicht mehr auf die Kopie aus.

joe.M schrieb:
> zudem ist mir auch folgender Ausdruck unklar:
>
> mov [R2], [R3]  ;RAM->RAM

Was ist daran unklar? Der Kommentar beschreibt es doch. Ich glaube, Du 
denkst hier zu kompliziert. Hier werden keine Speicherbereiche in 
Register gemappt oder Zugriffe auf Speicher in Register umgeleitet o.Ä.
Was mir nur dazu einfällt, ist dass Kopiern von Speicher nach Speicher 
mit einem einzelnen MOV beim 8086 nicht ging. :-D

von asm (Gast)


Lesenswert?

> mov R0, [R1]        ;RAM ->REG
> Dies bedeutet doch
> Ram-Inhalt von R1 via Pointer nach R0
> oder?
Wert von R1 ist die Adresse der Speicherzelle (word), deren Inhalt 
(Wert) nach R0 kopiert wird.

> Wenn ich nun den Inhalt von R1 ändere ändert sich dann auch der inhalt
> von R0?
???

> mov [R2], [R3]  ;RAM->RAM
Kopiert Speicher auf Speicher, dass muss nicht unbedingt RAM sein. In 
den Registern stehen die Adressen der Speicherstellen.

von marks (Gast)


Lesenswert?

Hallo,
also ich hole den Thread nochmal hoch weil ich dass mit den Pointer in 
Assembler(C167) auch nicht verstehe,

verwende ich also einen point6er wenn ich nicht auf das Register sondern 
auf den Speicher zugreife will?
Oder wann verwende ich pointer?

Gruß Marks

von asm (Gast)


Lesenswert?

Hallo marks,

da verwechselt du etwas. Hier geht es nicht um pointer, sondern um 
Adressierungsarten des mov Befehls. Ein Blick in das instruction manual 
klärt das Obige schnell auf.

von MCUA (Gast)


Lesenswert?

Rx  bezeichnet den Wert in Rx
[Rx] bezeichnet den Wert der Zelle, auf die Rx zeigt

von marks (Gast)


Lesenswert?

Hallo

>Hier geht es nicht um pointer, sondern um
>Adressierungsarten des mov Befehls.

MCUA schrieb:
> Rx  bezeichnet den Wert in Rx
> [Rx] bezeichnet den Wert der Zelle, auf die Rx zeigt

Sommit wäre es doch ein pointer!
Habe jetzt den überblick verloren
Für ein Beispiel mit Register und Inhalt..wäre ich dankbar

Gruß Marks

von Guido (Gast)


Lesenswert?

1
    mov    R4, #bufferstart        ; lade Adresse des Buffers
2
    mov    R2, [R4]                ; lade 1. Word aus dem Buffer

von asm (Gast)


Lesenswert?

mov R3, #0x1E00
in R3 steht jetzt 7680

mov R2, R3
in R2 steht jetzt auch 7680

mov R2, [R3]
in R2 steht jetzt die Zahl, die sich aus den Speicherstellen 7680 und 
7681 ergibt.

von Marcs (Gast)


Lesenswert?

........
> mov R2, [R3]
> in R2 steht jetzt die Zahl, die sich aus den Speicherstellen 7680 und
> 7681 ergibt.

Könntest du das noch genauer erklären,dies ist mir nicht 100% klar

Gruß Marcs

von c167 (Gast)


Lesenswert?

an Speicherstelle 7680 low byte und an 7681 high byte ergibt 16 bit word

von Florian Z. (Firma: privat) (zirus)


Lesenswert?

Hallo Zusammen,

dieser Beitrag ist zwar schon etwas älter aber ich greife diesen wieder 
auf da es hier aus meiner Sicht am ehesten herpasst ohne eine neue 
Diskussion zu starten zu dem alten C167.

Bin kein Assembler experte aber beschäftige mich mit leiderschaft damit 
.....

leider stehe ich, mit meinem Verständnis, bei folgendem Befehl an .....

mov r1,  #C946h   ;soweit klar, denke ich
mov r13, #0       ;auch klar, denke ich
xor r13, [r1+]    ;excl. or = klar ; [r1+] leider unklar .....

Wäre euch da sehr dankbar über eure Hilfe (für Beginner).

Sorry wenn es für erfahrene Assembler eine Beginner Frage ist  ...... 
bin noch am Anfang vom Assembler lernen .....

VG aus Österreich
Florian

P.S.:
Die Beschreibung hab ich gelesen - aber ohne Beispiel verstehe ich es 
leider nicht.
"Bitwise XOR indirect word memory with direct GPR and post-increment 
source pointer by 2"

: Bearbeitet durch User
von Carl D. (jcw2)


Lesenswert?

Ok, trotz Alter des Threads ganz kurz:
R1 wird nach dem Zugriff inkrementiert. Wie bei der PDP11, die das in C 
influenzierte.

von MaWin (Gast)


Lesenswert?

Florian Z. schrieb:
> [r1+]

Pointer Arithmetik ;-)
1
...
2
int result = 0;
3
int *foo = 0x4711;
4
...
5
result = *foo++;
6
...

von MaWin (Gast)


Lesenswert?

MaWin schrieb:
> int *foo = 0x4711;

;->>> 16Bit CPU

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.