Re: $asm Befehl Kategorie: Programmierung Assembler (von PeterS - 11.12.2009 14:16) | |
Als Antwort auf $asm Befehl von Andy - 11.12.2009 13:26
| |
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: Re: $asm Befehl (von Andy - 14.12.2009 7:21) |
Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum