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
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
> 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.
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
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.
Rx bezeichnet den Wert in Rx [Rx] bezeichnet den Wert der Zelle, auf die Rx zeigt
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
1 | mov R4, #bufferstart ; lade Adresse des Buffers |
2 | mov R2, [R4] ; lade 1. Word aus dem Buffer |
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.
........ > 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
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
Ok, trotz Alter des Threads ganz kurz: R1 wird nach dem Zugriff inkrementiert. Wie bei der PDP11, die das in C influenzierte.
Florian Z. schrieb: > [r1+] Pointer Arithmetik ;-)
1 | ...
|
2 | int result = 0; |
3 | int *foo = 0x4711; |
4 | ...
|
5 | result = *foo++; |
6 | ...
|
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.