Buchempfehlung
Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie
Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie
Umfassend, aber leicht verständlich führt dieses Buch in die Programmierung von ATMEL AVR Mikrocontrollern ein. [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

Referenz - Inline-Assembler

Referenz-Navigation

 

Unter Inline-Assembler versteht man die direkte Einbindung von Maschinenspracheprogrammen in den Quellcode.

Es ist zu beachten, dass die Verwendung von Inline-Assembler die Portierbarkeit von Programmen auf andere Plattformen oder Architekturen sehr einschränkt, denn Assembler-Code ist üblicherweise nur auf einer bestimmten Architektur (z. B. x86 oder x86_64) und einer bestimmten Plattform (z. B. Windows oder Unix) lauffähig. Von der Verwendung wird daher abgeraten, wenn dies nicht unbedingt erforderlich ist.

Während das unter QBASIC nur umständlich über Opcodes möglich war, ist es in FreeBASIC dank des Befehls BefehlsreferenzeintragASM kein Problem, Assembler-Codes direkt einzubinden:

Asm mov  eax, ebx
Asm imul eax, ecx

oder

ASM
 mov  eax, ebx
 imul eax, ecx
End Asm

Auch der Zugriff auf Variablen ist "ohne Tricks" möglich; ihre Bezeichner sind auch innerhalb eines ASM-Blocks verfügbar.
Wird ein ASM-Block innerhalb einer FUNCTION verwendet, kann das Symbol BefehlsreferenzeintragFUNCTION als Pointer auf die Adresse verwendet werden, an der das Ergebnis der Funktion gespeichert werden soll.

' 32 Bit Version
Function Mal(ByVal x As Long, ByVal y As Long) As Long
  Asm
    mov  eax, [x] 'hole x nach eax
    imul eax, [y] 'Multipliziere mit y
    mov [Function], eax 'Ergebnis als Rückgabewert
  End Asm
End Function

Dim As Long a = 45, b = 54
Print Mal(a, b)

Syntax
FreeBASIC verwendet den GCC Assembler AS, der im bin-Verzeichnis als AS.EXE enthalten ist.
Der Assembler verwendet die einfache Intel-Syntax wie die bekannteren x86-Assembler MASM, TASM, NASM, YASM und FASM.
Wie in BASIC-Quelltexten wird das Hochkomma als Zeichen für einen nachfolgenden Kommentar gesetzt, nicht das ";" Zeichen wie sonst in Assemblerquelltexten üblich.
Der Assembler ist in Bezug auf Labelnamen 'case sensitive', d. h. Sie müssen die Groß- und Kleinschreibung beachten.

Registerbezeichnungen
Für die x86 Architektur (32-Bit):

Für die x86_64 Architektur (64-Bit):

' 64 Bit Version
Function Mal(ByVal x As Integer, ByVal y As Integer) As Integer
  Asm
    mov  rax, [x] 'hole x nach rax
    imul rax, [y] 'Multipliziere mit y
    mov [Function], rax 'Ergebnis als Rückgabewert
  End Asm
End Function

Dim As Integer a = 2123456789, b = 2987654321
Print Mal(a, b)

Kritische Assembleranweisungen
Je nach Betriebssystem oder Prozessortyp sind einige Assembleranweisungen nicht anwendbar. Im günstigsten Fall werden sie ignoriert oder mit einem Systemerror angezeigt, aber auch ein Systemcrash ist möglich.
Diese kritischen Assembleranweisungen für jedes Betriebssystem oder unterschiedliche Prozessortypen kann nicht für jeden Einzelfall aufgelistet werden.
Wer in Assembler arbeiten möchte, sollte die Einschränkungen der Hardware und des Betriebssystems, für das er Assembleranweisungen schreiben möchte, kennen.


Zusätzliche Informationen und Funktionen
  • Der Referenzeintrag wurde am 05.08.2007 von RedakteurVolta angelegt.
  • Die aktuellste Version wurde am 18.03.2016 von RedakteurVolta gespeichert.
  Versionen Versionen