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
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.