Präprozessor - Assembler

Der im Luna-Assembler eingebaute Präprozessor ist ein sog. Makroprozessor.

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 Sourcedateien und -Daten
  • Textersetzungen von Definitionen im Sourcecode.
  • Auflösung von Inline-Funktionen.
  • Auflösung von Makros.

Präprozessorfunktionen im Assembler-Code

Anweisungen

Command DescriptionExample
.equ create a constant .equ var = 123.45
.set create/assign a constant .set var = 123.45
.def Alias.def temp = R16
.device set the avr controller type.device atmega32
.import import a label.import _myLabel
.importClass1) import avr class. sets all defines and constants of the selected avr controller inclusive .device.importClass atmega32
.importObject2) import a library object .importObject Macro_Delay
.importUsedObjects3) auto-imports all in the source code used libraries objects.importUsedObjects
.cseg select flash segment.cseg
.dseg select sram segment.dseg
.eseg select eeprom segment.eseg
.org Sets the pointer of the actual active segment to a specific value .org intVectorSize
.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“
.regisr register a label to a interrupt vector „on the fly“ (used for Library Code).regisr vectorAddress,mylabel
.db (byte) 1 byte each value and strings, data block. 4).db „hello“,0x3b
.dw (word) 2 bytes each value, data block. 5).dw 0x3bda,0xcf01
.dt (triple) 3 bytes each value, data block. 6).dt 0xf0d1a4
.dl (long) 4 bytes each value, data block. 7).dl 0xff01ddca
.bin (file) data block from file byte-wise. 8).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. 9).odw 0x3bda,0xcf01
.odt (triple) 3 bytes each value, object data block. 10).odt 0xf0d1a4
.odl (long) 4 bytes each value, object data block. 11).odl 0xff01ddca
.obin (file) data block from file byte-wise. 12).obin „filepath“
.dobjend endmark for object data block with .odb, .odw, … 13))).dobjend label
Beispiel für Objekt-Datenblock
classServiceudpdDatagram:
.odb		"this is a message from the luna udpd server",0x0D,0x0A
.odb		"build with lavrc version ","2013.r6.7",0x0D,0x0A
.odb		0x0D,0x0A
.dobjend	classServiceudpdDatagram

Funktionen

Die Präprozessorfunktionen können nur mit Konstanten verwendet werden.

Funktionen aus dem Luna-Befehlssatz, abgebildet im Präprozessor.
  • lo8() bzw. low() - Low-Byte eines 16-Bit-Wertes
  • hi8() bzw. high() - High-Byte eines 16-Bit-Wertes
  • byte1() - 1. Byte eines 32-Bit-Wertes
  • byte2() - 2. Byte eines 32-Bit-Wertes
  • byte3() - 3. Byte eines 32-Bit-Wertes
  • byte4() - 4. Byte eines 32-Bit-Wertes
  • byte() - Typcasting auf 8-Bit-Integer.
  • word() - Typcasting auf 16-Bit-Integer.
  • integer() - Typcasting auf 16-Bit-Integer mit Vorzeichen.
  • long() - Typcasting auf 32-Bit-Integer.
  • longint() - Typcasting auf 32-Bit-Integer mit Vorzeichen.
  • int8() - Typcasting auf 8-Bit-Integer mit Vorzeichen.
  • int16() - Typcasting auf 16-Bit-Integer mit Vorzeichen.
  • int24() - Typcasting auf 24-Bit-Integer mit Vorzeichen.
  • int32() - Typcasting auf 32-Bit-Integer mit Vorzeichen.
  • uint8() - Typcasting auf 8-Bit-Integer.
  • uint16() - Typcasting auf 16-Bit-Integer.
  • uint24() - Typcasting auf 24-Bit-Integer.
  • uint32() - Typcasting auf 32-Bit-Integer.
  • single() - Typcasting auf 32-Bit-Float mit Vorzeichen.
  • float() - Typcasting auf 32-Bit-Float mit Vorzeichen.
  • odd() - Prüfen ob Wert ungerade.
  • even() - Prüfen ob Wert gerade.
  • chr() - Umwandlung nach Binärstring (byte).
  • mkb() - Umwandlung nach Binärstring (byte).
  • mki() - Umwandlung nach Binärstring (integer).
  • mkw() - Umwandlung nach Binärstring (word).
  • mkl() - Umwandlung nach Binärstring (long).
  • mks() - Umwandlung nach Binärstring (single).
  • strfill() - String auffüllen mit Zeichenkette.
  • hex() - Konvertierung nach Hexadezimaldarstellung.
  • str() - Konvertierung nach Dezimaldarstellung.
  • bin() - Konvertierung nach Binärdarstellung.
  • asc() - Umwandlung des ersten Zeichens einer Zeichenkette in sein numerisches Equivalent.
  • min() - Arithmetische Funktion.
  • max() - Arithmetische Funktion.
  • left() - Linken Teil eines Textes lesen (String).
  • right() - Rechten Teil eines Textes lesen (String).
  • mid() - Teil eines Textes lesen (String).
  • format() - Formatierte, dezimale Zahlendarstellung.
  • nthfield() - Teil einer separierten Zeichenkette.
  • val() - Zeichenkette mit Dezimalzahl zu Integerwert konvertieren.
Sonderfunktionen, nur im Präprozessor.
  • Descriptor() - Aktuellen Deskriptor (Zeiger/Position) des Assemblers lesen (byte-Adresse).
  • MakeIdentifier() - Ein Symbol aus einem String erstellen.
  • Defined() - Prüfen ob eine Konstante oder ein Symbol definiert ist.
  • Replace() - Zeichenkette in einem String suchen und erste Vorkommende ersetzen.
  • ReplaceAll() - Zeichenkette in einem String suchen und alle Vorkommenden ersetzen.
1) , 2) , 3) only used by the compiler
4) , 5) , 6) , 7) , 8) Note: End of block auto-aligned/padding to even address!
9) , 10) , 11) , 12) Note: No auto-alignment/padding
13) Initiates the auto-alignment/padding to even address over the complete data set.