Programmieren mit ARM64 Assembler: Unterschied zwischen den Versionen
K →Inhalt |
K →Inhalt |
||
| Zeile 46: | Zeile 46: | ||
** [[Funktionen und Stack#Verwendung des Stacks für lokale Variablen und Funktionsaufrufe|Verwendung des Stacks für lokale Variablen und Funktionsaufrufe]] | ** [[Funktionen und Stack#Verwendung des Stacks für lokale Variablen und Funktionsaufrufe|Verwendung des Stacks für lokale Variablen und Funktionsaufrufe]] | ||
** [[Funktionen und Stack#Regeln für das Aufrufen von Funktionen (AAPCS)|Regeln für das Aufrufen von Funktionen (AAPCS)]] | ** [[Funktionen und Stack#Regeln für das Aufrufen von Funktionen (AAPCS)|Regeln für das Aufrufen von Funktionen (AAPCS)]] | ||
* [[Systemaufrufe]] | * [[Systemaufrufe]] | ||
** [[Systemaufrufe#Einführung in Linux-Systemaufrufe|Einführung in Linux-Systemaufrufe]] | ** [[Systemaufrufe#Einführung in Linux-Systemaufrufe|Einführung in Linux-Systemaufrufe]] | ||
| Zeile 56: | Zeile 55: | ||
** [[GPIO Programmierung#Direkte Steuerung der GPIO-Pins|Direkte Steuerung der GPIO-Pins]] | ** [[GPIO Programmierung#Direkte Steuerung der GPIO-Pins|Direkte Steuerung der GPIO-Pins]] | ||
** [[GPIO Programmierung#Besondere Register und Konfiguration|Besondere Register und Konfiguration]] | ** [[GPIO Programmierung#Besondere Register und Konfiguration|Besondere Register und Konfiguration]] | ||
---- | |||
* [[Interaktion mit C]] | * [[Interaktion mit C]] | ||
** [[Interaktion mit C#C-Funktionen aus Assembler aufrufen|C-Funktionen aus Assembler aufrufen]] | ** [[Interaktion mit C#C-Funktionen aus Assembler aufrufen|C-Funktionen aus Assembler aufrufen]] | ||
** [[Interaktion mit C#Assemblerfunktionen in C aufrufen|Assemblerfunktion in C aufrufen]] | ** [[Interaktion mit C#Assemblerfunktionen in C aufrufen|Assemblerfunktion in C aufrufen]] | ||
** [[Interaktion mit C#Inline-Assembler in C|Inline-Assembler in C]] | ** [[Interaktion mit C#Inline-Assembler in C|Inline-Assembler in C]] | ||
** [[Interaktion mit C#Bibliotheken verwenden|Bibliotheken verwenden]] | ** [[Interaktion mit C#Bibliotheken verwenden|Bibliotheken verwenden]] | ||
* [[Gleitkommaoperationen]] | * [[Gleitkommaoperationen]] | ||
** [[Gleitkommaoperationen#FPU-Register: Überblick|FPU-Register]] | ** [[Gleitkommaoperationen#FPU-Register: Überblick|FPU-Register]] | ||
Version vom 9. April 2025, 09:55 Uhr
Grundlagen
Der ARM-Prozessor ist ein sogenannter RISC-Computer (Reduced Instruction Set Computer). Das Designprinzip von RISC-Prozessoren führt zu einem kleineren und übersichtlicheren Befehlssatz, was das Erlernen von Assembler theoretisch einfacher macht. In dieser Einführung werden wir die grundlegenden Konzepte der ARM64-Bit Assembler Programmierung verständlich und praxisorientiert erklären, sodass sie auch für Anfänger zugänglich ist.
Was ist Assembler?
Assembler ist eine Programmiersprache, die es ermöglicht, den Computer auf sehr niedriger Ebene direkt zu steuern. Anders als Hochsprachen wie C oder Python kommuniziert Assembler direkt mit der Hardware, was eine präzise Kontrolle über den Prozessor und den Speicher ermöglicht. Diese direkte Steuerungsmöglichkeit macht Assembler zu einer mächtigen Sprache für ressourcenintensive oder sehr spezifische Aufgaben.
Aufbau dieses Tutorials
Dieses Tutorial ist so strukturiert, dass es sich von einem Kapitel zum nächsten Schritt für Schritt selbst erklärt. Zur Demonstration der Beispiele verwende ich einen Raspberry Pi 5, aber die Beispiele sollten ebenso auf den Modellen Raspberry Pi 3 und Raspberry Pi 4 funktionieren, sofern diese mit einem 64-Bit-Linux-System betrieben werden. Zu Beginn werden wir uns ansehen, wie man überhaupt Assemblerprogramme schreibt und diese auf einem ARM64-System ausführt.
Inhalt
- Programmierumgebung unter Linux erstellen und testen
- Tools, die zur Programmierung benötigt werden
- Allgemeines zu Zahlen (Dezimal, Binär, Hexadezimal)
- Das erste Programm "Hello World"
- Register und Speicher
- Laden und Speichern von Werten
- Addieren und Subtrahieren
- Multiplizieren, Dividieren und Akkumulation
- Shiften und Rotation
- Logische Operatoren
- Programmablauf steuern
- Funktionen und Stack
- Systemaufrufe
- GPIO Programmierung
- Interaktion mit C
- Gleitkommaoperationen
- FPU-Register
- Verwendung der Register in Funktionen
- Nutzung der FPU-Register in Assemblerfunktionen
- Arbeiten mit FPU-Registern
- Konvertierung von Gleitkommazahlen
- Vergleichen
- NEON Coprozessor
- Einführung in den NEON-Coprozessor
- SIMD (Single Instruction Multiple Data) Befehle
- Optimierung von Multimedia- und Signalverarbeitungsanwendungen
- Anhang
- Diassemblieren
- Big vs. Little Endian
- Aliase
- Direktiven
- Daten ausrichten
- Makros in Assembler