Präprozessor

Der Präprozessor ist ein Teil des Compilers/Assemblers, der den Sourcecode für den Übersetzungsvorgang vorverarbeitet. Es existieren zwei Präprozessoren. Einmal für den Luna- und einmal für den Assembler-Quelltext.

Im Präprozessor werden folgende Teilbereiche bearbeitet:

  • Auflösung von arithmetischen und logischen Ausdrücken mit Konstanten.
  • Bedingte Einbindung von Code-Bereichen.
  • Einbinden von externen Quelltextdateien und -Daten
  • Textersetzungen von Definitionen/Makros im Sourcecode.
  • Auflösung von Inline-Funktionen.
  • #define - Defines/Aliase.
  • #declare - Deklaration eines Methoden-Aufrufs.
  • #extern - Deklaration einer externen Methode zum Import.
  • #global - Deklaration einer internen Methode zum Export.
  • #undef - Define entfernen.
  • #ide - IDE-Steuerung im Source.
  • #pragma - Compiler-Steuerung im Source.
  • #pragmaSave - Compiler-Steuerung im Source.
  • #pragmaRestore - Compiler-Steuerung im Source.
  • #pragmaDefault - Compiler-Steuerung im Source.
  • #include - Quelltextdateien einbinden.
  • #includeData - Binärdaten in das Datensegment einbinden.
  • #library - Externe Quelltext-Bibliothek einbinden.
  • #extern - Deklaration einer externen Methode.
  • #error - Fehlermeldung ausgeben (Kompiliervorgang abbrechen).
  • #warning - Warnmeldung ausgeben.
  • #message - Nachricht ausgeben.
Command DescriptionExample/Values
.filetype type output filetype (object file format) .filetype elf64
.equ name = value create a constant .equ var = 123.45
.set name = value create/assign a constant .set var = 123.45
.def name = expression Alias.def temp = RAX
.import name/label import a label.import _myLabel
.section segment select memory segment.section text/bss/data
.org Sets the descriptor of the current active segment to a specific value .org 0x1000
.error Display a error message. Break compile/assemble..error „message“
.warning Display a warning message..warning „message“
.message, .print Display a info message without line number and origin..message „message“
.db (byte) 1 byte each value and strings, data block..db „hello“,0x3b
.dw (word) 2 bytes each value, data block..dw 0x3bda,0x1f01
.dd (double word) 4 bytes each value, data block..dd 0xff01ddca
.dq (quad word) 8 bytes each value, data block..dq 0xff01ddcacd48dd50
.bin (file) data block from file byte-wise..bin „filepath“
.odb (byte) 1 byte each value and strings, object data block.odb „hello“,0x3b
.odw (word) 2 bytes each value, object data block..odw 0x3bda,0xcf01
.odt (triple) 3 bytes each value, object data block..odt 0xf0d1a4
.odl (long) 4 bytes each value, object data block..odd 0xff01ddca
.obin (file) data block from file byte-wise. 1).obin „filepath“
.dobjend endmark for object data block with .odb, .odw, … .dobjend label
  • Defined() - Prüfen ob eine Konstante oder ein Symbol definiert ist.
  • byte1-8() - 1-8. Byte eines Wertes
  • byte() - Typcasting auf 8-Bit-Integer.
  • int8() - Typcasting auf 8-Bit-Integer mit Vorzeichen.
  • word() - Typcasting auf 16-Bit-Integer.
  • integer() - Typcasting auf 16-Bit-Integer mit Vorzeichen.
  • int64() - Typcasting auf 64-Bit-Integer mit Vorzeichen.
  • uint64() - Typcasting auf 64-Bit-Integer.
  • long() - Typcasting auf 32-Bit-Integer.
  • longint() - Typcasting auf 32-Bit-Integer mit Vorzeichen.
  • single() - Typcasting auf 32-Bit-Float mit Vorzeichen.
  • double() - Typcasting auf 32-Bit-Float mit Vorzeichen.
  • countfields() - Teil einer separierten Zeichenkette.
  • odd() - Prüfen ob Wert ungerade.
  • even() - Prüfen ob Wert gerade.
  • chr() - Zeichenwert nach String.
  • strfill() - String auffüllen mit Zeichenkette.
  • asc() - Umwandlung des ersten Zeichens einer Zeichenkette in sein numerisches Equivalent.
  • hex() - Konvertierung nach Hexadezimaldarstellung.
  • str() - Konvertierung nach Dezimaldarstellung.
  • bin() - Konvertierung nach Binärdarstellung.
  • isnumeric() - Prüfen ob Argument eine Zahl ist.
  • min() - Arithmetische Funktion.
  • max() - Arithmetische Funktion.
  • RegName() - Name eines Registers ermitteln.
  • RegNum() - Nummer eines Registers ermitteln.
  • TypeINT() - Wert-Typ ermitteln.
  • TypeSINT() - Wert-Typ ermitteln.
  • TypeUINT() - Wert-Typ ermitteln.
  • TypeFLOAT() - Wert-Typ ermitteln.
  • TypeOBJECT() - Wert-Typ ermitteln.
  • TypeSigned() - Ermitteln ob Wert Vorzeichenbehaftet.
  • TypeBits() - Anzahl Bits ermitteln die ein Wert belegt.
  • ConstType() - Zahlenwert-Typ ermitteln.
  • left() - Linken Teil einer Zeichenkette lesen.
  • right() - Rechten Teil einer Zeichenkette lesen.
  • mid() - Teil einer Zeichenkette lesen.
  • format() - Formatierte Zahlendarstellung.
  • nthfield() - Teil einer separierten Zeichenkette.
  • Replace() - Zeichenkette suchen und erste Vorkommende ersetzen.
  • ReplaceAll() - Zeichenkette suchen und alle Vorkommenden ersetzen.
  • val() - Zahlenwert aus Zeichenkette extrahieren.

Nur im Assembler-Präprozessor

1) Note: No auto-alignment/padding