Forum: Mikrocontroller und Digitale Elektronik .def Pointer


von Multi K. (multikulti)


Lesenswert?

Hallo,
mit .def lassen sich ja bekannterweise Symbolische namen für Register 
vergeben. Das funktioniert natürlich auch mit den Pointer registern 
XH,XL etc. Wie aber kann ich dem Pointer selbst einen Namen zuordnen?

.def TimestampPointer = X

generiert mir die Fehlermeldung: "Invalid register" eigentlich logisch, 
ist ja auch kein Register. .equ funzt aber auch nicht. Geht das 
überhaupt oder ist der X Pointer auf ewig dazu verdammt der X Pointer zu 
sein?

mfg

: Verschoben durch Moderator
von Karl B. (gustav)


Angehängte Dateien:

Lesenswert?

Schau mal:
Weil das nicht in Opcodes vorkommt.
Könnte man ja 'mal drüber nachdenken, wie man
den targetspezifischen Befehlssatz erweitert.

Das Doppelregister X ist schon vergeben:

.def  XH  = r27
.def  XL  = r26


ciao
gustav

: Bearbeitet durch User
von S. Landolt (Gast)


Lesenswert?

#define  TimestampPointer  x

von Karl B. (gustav)


Lesenswert?

Hi,

https://www.avrfreaks.net/forum/passing-pointer-asm-functions

x-pointer habe ich in meinen Proggis nicht drin.
Was nicht heißt, dass es diese auch gibt.

ciao
gustav

von c-hater (Gast)


Lesenswert?

Multi K. schrieb:


> Hallo,
> mit .def lassen sich ja bekannterweise Symbolische namen für Register
> vergeben. Das funktioniert natürlich auch mit den Pointer registern
> XH,XL etc. Wie aber kann ich dem Pointer selbst einen Namen zuordnen?
>
> .def TimestampPointer = X
>
> generiert mir die Fehlermeldung: "Invalid register" eigentlich logisch,
> ist ja auch kein Register. .equ funzt aber auch nicht. Geht das
> überhaupt oder ist der X Pointer auf ewig dazu verdammt der X Pointer zu
> sein?

Nehmen wir mal an, du wolltest X symbolisch als "DataPtr" verwenden:

.undef XL
.undef XH
.def DataPtrL XL
.def DataPtrH XH
#define DataPtr X

Dann kannst du Sachen machen wie:

ldi DataPtrL,Low(data)
ldi DataPtrH,High(data)
ld R0,DataPtr+
ld R0,DataPtr
ldd R0,DataPtr+5

von c-hater (Gast)


Lesenswert?

c-hater schrieb:

> ldd R0,DataPtr+5

Mist, das funktioniert mit X natürlich nicht. Nur mit Y oder Z.

von c-hater (Gast)


Lesenswert?

c-hater schrieb:

> .undef XL
> .undef XH
> .def DataPtrL XL
> .def DataPtrH XH

Und nochmal Mist. Nachdem man XL und XH undefiniert hat, muss man 
natürlich die tatsächlichen Registernamen verwenden, also:

> .def DataPtrL R26
> .def DataPtrH R27

von S. Landolt (Gast)


Lesenswert?

> .def DataPtrL R26

Fehlt noch immer das "=".

Und bin ich eigentlich der Einzige hier, der die Assembler-Option '-c' 
verwendet?

von c-hater (Gast)


Lesenswert?

S. Landolt schrieb:

> Fehlt noch immer das "=".

Korrekt. Das alles kommt davon, wenn man's einfach in den Browser tippt, 
ohne es zuvor zu überprüfen...

Schützt aber auch sehr gut vor Nachnutzung durch C&Pler...

> Und bin ich eigentlich der Einzige hier, der die Assembler-Option '-c'
> verwendet?

Vermutlich schon. Ich fand diese C-ische case sensitivity schon immer 
unerträglich und bin dankbar und glücklich, dass das bei AVR-Assembler 
eben nicht Standard ist. So wie sie das bei allen Sprachen auch nicht 
ist, die ich gern verwende. ;o)

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.