User manual

218Compiler
© 2013 Conrad Electronic
4.4.1 Ein Beispiel
Am folgenden Beispiel (ist auch in den Demo Programmen enthalten) wird die Struktur von Assemb-
lerroutinen erklärt. Dabei muss in dem Projekt der CompactC Source Code die Endung ".cc" die As-
sembler Sourcen die Endung ".asm".
// CompactC Source
void proc1 $asm("tag1")(void);
int proc2 $asm("tag2")(int a, float b, byte c);
int glob1;
void main(void)
{
int a;
proc1();
a= proc2(11, 2.71, 33);
}
Vor Aufruf der Assembler Prozeduren proc1 und proc2 müssen die beiden Prozeduren erstmal de-
klariert werden. Dies geschieht mit dem Befehlswort $asm. Die Deklaration sieht in Basic ähnlich
aus:
' Basic Deklaration der Assembler Routinen
$Asm("tag1") proc1()
$Asm("tag2") proc2(a As Integer, b As Single, c As Byte) As Integer
Man sieht in der Deklaration die Strings "tag1" und "tag2". Diese Strings werden in einer ".def" Da-
tei 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.
Hier folgt nun der Assembler Source der Prozedur proc1. In diesem Source wird die globale Variable
glob1 auf den Wert 42 gesetzt.
; Assembler Source
.ifdef tag1
proc1:
; global variable access example
; write 42 to global variable glob1