C Pointer in Assembler ändern?

OP #1475504
Lesenswert?

Hey Leute,
ich stehe gerade auf dem Schlauch. Ich habe folgenden code

.extern cpointer //ist in meinem c-code dann uint_8* cpointer

diese lade ich dann in assembler mit

LDI    ZL,lo8(cpointer)
LDI    ZH,hi8(cpointer)

So nun mach ich

LD    R18,Z+

und jetzt möchte ich den neuen Wert von Z (wurde ja inkrementiert) 
wieder auf cpointer zurückschreiben. Wie mach ich das?

Vielen Dank!

Gruß Toffer
#1475601
Lesenswert?

Dein Code macht nicht das, was die Beschreibung sagt.

Damit lädst Du nach Z nicht cpointer, sondern &cpointer (die Adresse von 
cpointer) und liest nicht *cpointer (das, worauf cpointer zeigt), 
sondern direkt das LSB von cpointer (cpointer & 0xff).

Richtig wäre:
1
lds ZL, cpointer
2
lds ZH, cpointer+1  ; Z = cpointer
3
ld r18, Z+          ; r18 = *cpointer++
4
sts cpointer, ZL    ; cpointer++ zurückspeichern
5
sts cpointer+1, ZH

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