Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum

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: