Hallo, vor Kurzem habe ich angefangen mich näher mit der Assemblerprogrammierung zu beschäftigen. (Atmel xmega) Da die Programme nun allmählich größer werden, interessieren mich einige organisatorische Aspekte. Insbesondere interessiert mich die Einteilung der Register. Nutzt ihr z. B. für Parameter bei Unterprogrammen immer die gleichen Register? Definiert ihr euch hierfür allgemeine Namen (param1, param2, …) oder benennt ihr sie direkt nach Aufgabe (xPosition, yPosition, …) je nach Unterprogramm? Oder legt ihr Aufrufparameter gleich in den SRAM? Verwendet ihr spezielle (also zuvor definierte) temporäre/Akku-Register für die gelegentliche Bitschieberei, z. B. für das Legen einer Bitsequenz auf einen Port oder Controlregister? Sichert ihr bei Unterprogrammen jedes darin verwendete Register mit push/pop oder nur jene welche auch wirklich vorher verwendet wurden? Gibt es noch spezielle Tipps für das Organisieren von Registern oder ein Assemblerprogramm im Allgemeinen? Vielen Dank und liebe Grüße :)
Man köönte sich auch gleich an eine Aufrufkonvention halten z.B. von C. Dann kann man später einfacher eine Hochsprache auf die Funktionen zugreifen lassen. cdecl, stdcall, Pascal, Register(FastCall)
Hi >Nutzt ihr z. B. für Parameter bei Unterprogrammen immer die gleichen >Register? Nein. Es gibt Befehle, die nur auf bestimmte Register anwendbar sind. Einen Pointer auf eine Stelle im Flash in r2/r3 zu übergeben ist recht sinnfrei. >Definiert ihr euch hierfür allgemeine Namen (param1, param2, …) oder >benennt ihr sie direkt nach Aufgabe (xPosition, yPosition, …) je nach >Unterprogramm? Ich benutze dieses .def-Gedödel überhaupt nicht. Ein Grund dafür ist, das ich ich viele Sachen in eigenen Bibliotheken (Displays, Sensoren, Schnittstellen, mathematische Routinen...) habe. Verschiedene Bezeichner für ein Register in einem Programm sind nicht hilfreich, sondern nur verwirrend. >Oder legt ihr Aufrufparameter gleich in den SRAM? Kommt auf die Anzahl und die Größe der Parameter an. Bei häufiger benutzten Unterprogrammen verwende ich für die Parameterübergabe meist Macros. Das erspart Schreibarbeit und ist auch leichter lesbar. >Verwendet ihr spezielle (also zuvor definierte) temporäre/Akku-Register >für die gelegentliche Bitschieberei, z. B. für das Legen einer >Bitsequenz auf einen Port oder Controlregister? Da kein .def, auch kein 'temp'. >Sichert ihr bei Unterprogrammen jedes darin verwendete Register mit >push/pop oder nur jene welche auch wirklich vorher verwendet wurden? In Bibliotheken ja. Da weiß ich nicht von wo aus sie aufgerufen werden. Bei 'normalen' Unterprogrammen eher eine Ermessenssache. Allerdings würde ich Anfängern raten, lieber ein push/pop mehr zu verwenden als stundenlang einen Fehler zu suchen. >Man köönte sich auch gleich an eine Aufrufkonvention halten z.B. von C. >Dann kann man später einfacher eine Hochsprache auf die Funktionen >zugreifen lassen. cdecl, stdcall, Pascal, Register(FastCall) Warum jeden Mist nachmachen? Es sind ja gerade die Freiheiten, die Assembler so interessant machen. MfG Spess
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.