Asm-endAsm

Einfügen von Assemblerquelltext an die aktuelle Position. Syntax:

  • Asm
    • assembler-source code
  • endAsm

Inline-Assembler

Zeichenketten und Kommentare der Inline-Assembler-Quellcodes folgen der gleichen Syntax wie im Luna-Code. Zeichenketten sind daher immer mit Anführungszeichen versehen. Kommentare beginnen mit ' oder //, zusätzlich ; am Zeilenanfang.

Allgemein

Labels im Assembler-Source

Jedes Label steht in einer eigenen Zeile, nachfolgende Befehle sind nicht vorgesehen.

Inline-Assembler

Die Labels in Luna sind auf die aktuelle Klasse bezogen, z.B. das Label „mylabel“ im Hauptprogramm wird vom Compiler zu „classAvrMylabel“ erweitert. „mylabel“ in einer Klasse „myclass“ wird zu „classMyclassMylabel“. Auch Labels die im Inline-Assembler erstellt wurden, werden diesbezüglich erweitert.

Die Namenserweiterung ist zwingend notwendig um die verschienenen Namensräume getrennt halten zu können und einen Zugriff aus dem Luna-Source heraus zu ermöglichen. Dies betrifft ausschließlich den Inline-Assembler im Luna-Source.

Beispiel 1

' somewhere in the main program
Asm
  classAvrMyLoop:
    nop
    rjmp classAvrMyLoop
endAsm

Beispiel 2

' somewhere in the main program
Asm
  MyLoop:             'will be expanded to  "classAvrMyLoop"
    nop
    rjmp classAvrMyLoop
endAsm

Beispiel 3

' call assembler routine
call example
' Somewhere in the program code
Asm
  classAvrexample:
    add  R16,R17
    ori  R16,&h33
    ldi  R16,(1<<3) or (1<<7)   ; Set bit 3 and 7
    ldi  ZL,lo8(classAvrexample)
    ldi  ZH,hi8(classAvrexample)
    inc  R17
    ret
endAsm