Forum: Mikrocontroller und Digitale Elektronik .def-directive öfters und/oder anders verwenden


von Martin Witt (Gast)


Lesenswert?

Hallo zusammen,

in der Praxis hat sich bei mir rausgestellt, daß ich die def-Direktive
öfters verwenden möchte. Folgendes Beispiel:

Ich habe einen Code-Abschnitt, der, sagen wir mal, von 6 Registern
Gebrauch macht. Also definiere ich zugeschnitten auf den Code 6
"Aliase"

Jetz habe ich einen anderen Code-Abschnitt, der sagen wir mal 8
Register benötigt, also wirds langsam eng mit den ganzen
Spezialregister und (R0-R15) usw.

Nachdem ich aber die Register vom ersten Code-Abschnitt momentan nicht
brauche läge es doch nahe, diese einfach umzubennen also auf die neue
Verwendung zuzuschneidern.

Ich habe es ausprobiert, und der Compiler kann scheinbar mit dem
Umbennen leben.

In größerem Code mit Sprüngen wirds aber unübersichtlich und unter
Umständen sogar Problematisch. Jetzt würde ich also gerne die
"Aliase" löschen und sozusagen onDemand wieder neu vergeben, damit
der Asembler meckert und mich aufmerksam macht. Mit der Performance
dürfte es ja keine Probleme geben, da der Proz ja sowieso mit den
Registern arbeitet.

Gibt es einen Befehl der ein "Alias" löscht?

Wie macht Ihr das?

Grüße

Martin

von Dave (Gast)


Lesenswert?

eine .def steht... das is halt assembler: du musst wissen, was du
machst. woher soll der assembler denn wissen, dass er genau zu der zeit
in die routine springt und flutsch genau die register überschreibt..
damit wäre der sinn von assembler eigentlich gegessen.

ich versuche natürlich für alle dinge, die auf längere zeit gespeichert
werden sollen, ein low-register zu nehmen. falls z.b. nen pointer
register gebraucht wird, muss natürlich der wert am anfang der routine
neu geladen werden.
am anfang denkt man: 32 register :) da brauch ich nur 1 g aber man
merkts später dann... da bleibt dir immernoch "sts [ramzelle], rXX"
haut dir nen register an eine festgelegte stelle im ram.. für daten,
die nicht sooo oft gebraucht werden, die beste lösung.. "lds rXX,
ramzelle" läd entsprechend zurück. damit spart man viele register.

dave

von Andi (Gast)


Lesenswert?

Wenn Du merkst, das ein Uunterprogramm Register verwendet die auch wo
anders verwendet werden sicher deren Inhalt am Anfang des UP mit PUSH
auf den Stapel, z. B. "PUSH Temp3", und am Ende des UP holst Du den
alten Inhalt des Register mit z. B. "POP Temp3" wieder zurück.
Da brauchst Du Dir dann keine Sorgen zu machen.
Geht natürlich nur, wenn es ein µC mit SRAM ist.

Gruß
Andi

von condor (Gast)


Lesenswert?

hallo
du kanst einem register auch 2 - 3 nahmen geben z.b.

.def test1 = r16
.def temp = r16
.def status = r16

alles landet im r16

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.