Re: $asm Befehl Kategorie: Programmierung Assembler (von Andy - 14.12.2009 7:21) | |
Als Antwort auf Re: $asm Befehl von PeterS - 11.12.2009 14:16
| |
Vielen Dank Peter! Es steht so ähnlich ja schon in der Dokumentation drin, aber eben nicht so genau (Compiler-Befehl, �bergabewert ist ein Symbol etc.) Vielleicht kannst du deine Erklärung in die Dokumentation übernehmen, mit der habe ich es ver- standen! Schönen Start in die Woche, Andy > > Hallo Andy, > > der $asm Befehl ist eine Compiler Anweisung. Sie wird bentöigt, damit man vom C Source > die Assembler Routine aufrufen kann. Der Compiler kann ja nicht wissen welche der label > im Assembler Source der Startpunkt einer Routine ist, und welche Parameter die Assembler > Routine vom Stack nimmt. Der �bergabewert deklariert ein Symbol das in einem Assembler > .ifdef abgefragt werden kann. So kann Assemblercode geschrieben werden, der nur übernommen wird, > wenn der C-Source auch wirklich einen Funktionsaufruf macht. Ansonsten wird der Assemblercode > immer generiert, ob benutzt oder nicht. Ich verweise auf die Doku: > > > void proc1 $asm("tag1")(void); > int proc2 $asm("tag2")(int a, float b, byte c); > > Man sieht in der Deklaration die Strings "tag1" und "tag2". Diese Strings werden in > einer ".def" Datei definiert, wenn tatsächlich ein Aufruf der deklarierten Funktionen > stattfand. In diesem Fall sieht dann die ".def" Datei folgenderma�en aus: > > ; .def file > .equ glob1 = 2 > .define tag1 1 > .define tag2 1 > > Setzt man nun im Assembler Source die einzelnen Routinen in ".ifdef ..." Anweisungen, so > werden die Routinen nur assembliert, wenn ein Funktionsaufruf wirklich stattfand. Dies > spart Platz bei der Codegenerierung. Auch werden in der ".def" Datei die Positionen der > globalen Variablen definiert. Die ".def" Datei wird automatisch zusammen mit den > Assemblerdateien gemeinsam übersetzt, sie braucht nicht extra inkludiert zu werden. > > > Gruss Peter > > > Hallo, > > > > was genau macht der $asm-Befehl? Mir ist klar, dass er zur Deklaration für Assembler-Funktionen > > benötigt wird, aber warum? > > > > Ist das ein Präprozessor Befehl? Ein C-Befehl? Mich irritiert das $-Zeichen. > > > > Au�erdem: Was genau hat der �bergabewert zu sagen? Geht es hier auch wieder in Richtung Prä- > > prozessor? > > > > > > An dieser Stelle würde ich mir ein bisschen mehr in der Dokumentation wünschen. > > > > > > > > Vielen Dank schonmal, > > Andy | |
Antwort schreiben Antworten: |
Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum