Forum: Mikrocontroller und Digitale Elektronik WinAVR: Low()-Funktion in Assembler?


von Steffen Hausinger (Gast)


Lesenswert?

Hallo

Ich schreibe gerade einen zeitkritischen Teil bei WinAVR in Assembler.
In diesem Teil muss ich auf einen Pointer zugreifen.

Wie kann ich den Pointer in mein Pointer-Register (X,Y oder Z) laden?
Der Pointer ist ja 16-Bit lang. Wie kann ich erst den Low-Teil des
Pointers in beispielsweise XL und dann den High-Teil in XH laden? Im
AVRStudio gibt es für solche Zwecke die LOW()- und HIGH()-Funktionen -
gibt es bei WinAVR etwas ähnliches?

Viele Grüsse,
Steffen

von Steffen Hausinger (Gast)


Lesenswert?

Hallo nochmal

Ich habe inzwischen den Befehl

asm("st %a0,r24"::"x"(Pointer))

gefunden. Das Problem ist hier allerdings, dass der Pointer nicht nur
ins X-Register geladen wird, sondern auch gleich der "store"-Befehl
ausgeführt wird. Der "Pointer" ist jedoch in Wirklichkeit ein Array
und ich möchte zur Laufzeit auf die verschiedenen Elemente zugreifen.

Hat irgendjemand eine Idee, wie ich ein Registerpaar mit einem Pointer
in Assembler laden kann?!

Viele Grüsse,
Steffen

P.s.: Ich weiß, dass es eine Low()-Funktion bei Assembler mit WinAVR
gibt. Nur leider kann ich mich nicht mehr daran erinnern, wo ich etwas
zu diesem Thema gelesen habe :-(

von Steffen Hausinger (Gast)


Lesenswert?

Aaaahh, Erlösung:

asm(""::"x"(Pointer))

Puh, endlich die Lösung gefunden. Ist eigentlich auch nur konsequent
logisch, dass es so funktionieren muss.

Viele Grüsse,
Steffen

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.