Gute Literatur zu ARM-Assembler ist nach wie vor Mangelware. Selbst im Internet sucht man oft deutlich länger nach fundierten Antworten, als man möchte.
Warum also ausgerechnet ARM-Assembler? Der ARM-Befehlssatz ist omnipräsent: Er steckt in fast allen Smartphones, Tablets und unzähligen eingebetteten Systemen (Embedded Systems). Und als Apple schließlich seine Mac-Sparte auf eigene ARM-Chips umstellte, wurde endgültig klar, wie zukunftsweisend diese Architektur ist.
Viele fragen sich dennoch: Warum sollte man heute noch Assembler lernen, wenn es doch modernere, vermeintlich einfachere Alternativen gibt?
Für die meisten Alltagsaufgaben haben diese Hochsprachen absolut ihre Daseinberechtigung. Doch sie stoßen an Grenzen. Wer sich mit der „Bare Metal“-Programmierung – also der Entwicklung direkt auf der Hardware ohne Betriebssystem – beschäftigt, findet zwar viele Beispiele in C oder C++. Doch selbst dort geht es nicht ganz ohne Assembler: Um das System überhaupt zu starten, bevor C oder C++ übernehmen können, ist Assembler unverzichtbar. Hinzu kommt, dass die typischen Vorteile von Hochsprachen im Bare-Metal-Bereich schrumpfen, da viele gewohnte Komfort-Bibliotheken schlicht nicht zur Verfügung stehen.
Zudem wirkt der Zugriff auf Register in C oder C++ oft unnötig kryptisch. Die Datenblätter und Referenzhandbücher der Hardware-Hersteller sind im Grunde direkt für Assembler geschrieben. Hat man den Dreh erst einmal raus, merkt man schnell: Assembler ist kein Hexenwerk. Der größte Gewinn liegt im tiefen Verständnis dafür, wie ein Prozessor und das Gesamtsystem wirklich arbeiten – ein Wissen, das durch Abstraktionsschichten sonst verborgen bleibt. Nicht ohne Grund ist Assembler nach wie vor ein fester Bestandteil der Informatiklehre an vielen Hochschulen.
Dass Aller anfang schwer ist, habe ich selbst erlebt: Die umfangreichste Referenz für die Bare-Metal-Entwicklung auf dem Raspberry Pi ist das Circle-Projekt – geschrieben in C++. Ich habe viele Ideen daraus aufgegriffen und mühsam nach C portiert, insbesondere für die USB-Unterstützung (Tastatur, Maus und Massenspeicher). Allein um die Zusammenhänge tief genug zu verstehen, habe ich über einen Zeitraum von vier Jahren immer wieder intensiv getüftelt.
Was dich in diesem Buch erwartet: Dieses Buch dient sowohl als Schritt-für-Schritt-Grundlage als auch als praxisnahes Nachschlagewerk. Es konzentriert sich auf die Bare-Metal-Programmierung des Raspberry Pi 4 – einerseits im 32-Bit-Modus in Assembler, andererseits im 64-Bit-Modus in C. Obwohl die gezeigten Codebeispiele primär für den Pi 4 ausgelegt sind, gehe ich in den jeweiligen Kapiteln auch darauf ein, wie sich die Konzepte auf ältere Modellgenerationen übertragen lassen.
Seit Ende 2023 steht zudem der Raspberry Pi 5 bereit. Dieser unterstützt hardwareseitig keinen 32-Bit-Code mehr und unterscheidet sich in vielen Details grundlegend von seinen Vorgängern. Bereits beim Ansteuern der Grafikausgabe stieß ich auf Hürden, da liebgewonnene Mechanismen von den Entwicklern gestrichen wurden. Wie man diese Herausforderungen meistert, beschreibe ich in einem eigenen Kapitel.
Das Buch startet zunächst als Online-Version. Ich hoffe auf euer Feedback und eure Unterstützung aus der Community, um die Inhalte gemeinsam weiter zu verbessern und daraus ein wirklich großartiges Referenzwerk zu machen.
Viel Erfolg beim Programmieren auf der bloßen Hardware!