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 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)