Programmieren mit ARM64 Assembler: Unterschied zwischen den Versionen

Aus C und Assembler mit Raspberry
 
(15 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 37: Zeile 37:
* [[Shiften und Rotation]]
* [[Shiften und Rotation]]
* [[Logische Operatoren]]
* [[Logische Operatoren]]
* [[Sprungadressen (Labels)]]
* [[Programmablauf steuern]]
* [[Programmablauf steuern]]
** [[Programmablauf steuern|Bedingte und unbedingte Sprungbefehle: b, bl, cbz, cbnz]]
** [[Programmablauf steuern|Bedingte und unbedingte Sprungbefehle: b, bl, cbz, cbnz]]
Zeile 51: Zeile 52:
** [[Systemaufrufe#Übergabe von Parametern und Entgegennahme von Rückgabewerten|Übergabe von Parametern und Entgegennahme von Rückgabewerten]]
** [[Systemaufrufe#Übergabe von Parametern und Entgegennahme von Rückgabewerten|Übergabe von Parametern und Entgegennahme von Rückgabewerten]]
** [[Systemaufrufe#Verweis auf alle verfügbaren Linux-Systemaufrufe|Übersicht der Linux ARM64 Systemaufrufen]]
** [[Systemaufrufe#Verweis auf alle verfügbaren Linux-Systemaufrufe|Übersicht der Linux ARM64 Systemaufrufen]]
* [[GPIO Programmierung]]
<!--* [[GPIO Programmierung]]
** [[GPIO Programmierung#Grundlagen der GPIO-Programmierung|Grundlagen der GPIO-Programmierung]]
** [[GPIO Programmierung#Grundlagen der GPIO-Programmierung|Grundlagen der GPIO-Programmierung]]
** [[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]]
Zeile 70: Zeile 71:
** [[Gleitkommaoperationen#Vergleich von Gleitkommazahlen und bedingte Sprungbefehle|Vergleichen]]
** [[Gleitkommaoperationen#Vergleich von Gleitkommazahlen und bedingte Sprungbefehle|Vergleichen]]
*** [[Gleitkommaoperationen#Vergleich von Gleitkommazahlen und bedingte Sprungbefehle|Vergleich von Gleitkommazahlen und bedingte Sprungbefehle]]
*** [[Gleitkommaoperationen#Vergleich von Gleitkommazahlen und bedingte Sprungbefehle|Vergleich von Gleitkommazahlen und bedingte Sprungbefehle]]
* [[NEON Coprozessor]]
* [[NEON Coprozessor]]
** [[NEON Coprozessor#Verwendung des NEON-Coprozessors im Raspberry Pi|Verwendung des NEON-Coprozessors im Raspberry Pi]]
** [[NEON Coprozessor#Verwendung des NEON-Coprozessors im Raspberry Pi|Verwendung des NEON-Coprozessors im Raspberry Pi]]
** [[NEON Coprozessor#LANE-Prinzip|LANE-Prinzip]]
** [[NEON Coprozessor#LANE-Prinzip: Überblick|LANE-Prinzip]]
** [[NEON Coprozessor#Anwendung und Kontext im Raspberry Pi|Anwendung und Kontext im Raspberry Pi]]
** [[NEON Coprozessor#Anwendung und Kontext im Raspberry Pi|Anwendung und Kontext im Raspberry Pi]]
----
<br>
* Anhang
* Anhang
** [[Diassemblieren]]
** [[Diassemblieren]]
** [[Big vs. Little Endian]]
** [[Big vs. Little Endian]]
** [[Aliase]]
** [[Aliase]]
** [[Direktiven]]
** [[Direktiven|Assembler Direktiven (as/gcc)]]
*** Daten ausrichten
*** [[Direktiven#4. Daten ausrichten: .align|Daten ausrichten]]
** [[Makros in Assembler]]
** [[Makros in Assembler]]
** [[Übersicht der Linux ARM64 Systemaufrufen]]
*** [[Übersicht der Fehlercodes|Übersicht der Fehlercodes von Systemaufrufen]]

Aktuelle Version vom 11. April 2025, 10:39 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