Um mit der Assembler-Programmierung auf ARM-Prozessoren zu beginnen, ist es entscheidend, die grundlegende Funktionsweise der ARM-CPUs zu verstehen:
ARM-Prozessoren basieren auf der Von-Neumann-Architektur, die drei zentrale Komponenten umfasst: die CPU (Central Processing Unit), bestehend aus Kontrolleinheit und ALU, den Speicher und die Ein-/Ausgabegeräte (E/A). Diese Komponenten sind über einen Systembus miteinander verbunden.
Ein zentrales Konzept der Von-Neumann-Architektur ist das “Stored Program Concept”. Es besagt, dass Programme und Daten im gleichen Speicher abgelegt werden. Dies erlaubt es der CPU, Befehle aus dem Speicher zu lesen und auszuführen, wodurch die Flexibilität erhöht wird, verschiedene Programme einfach durch Ändern des Speicherinhalts auszuführen.
Die zentralen Komponenten der Von-Neumann-Architektur werden bei ARM Prozessoren durch Konzept der Load/Store-Architektur ergänzt.
Bei ARM-CPUs handelt es sich um eine Load/Store-Architektur, bei denen Speicherzugriffe nur mittels spezieller Befehle (LDR und STR) durchgeführt werden können und direkte Berechnungen auf Daten im Speicher nicht möglich sind (im Gegensatz zu x86 CPUs). Rechenoperationen finden demnach ausschließlich in den Registern (kleine Speichereinheiten) der CPU statt. Dies bedeutet, dass Daten für ihre Verarbeitung zuerst vom Speicher in Register geladen und nach der Berechnung wieder in den Speicher zurückgeschrieben werden müssen.
Ein Prozessor ist im wesentlichen eine Maschine, die Berechnungen mit Hilfe kleiner Speichereinheiten namens Register durchführt. Die Daten, mit deren Hilfe wir Berechnungen durchführen wollen, müssen also in diese Register geladen werden, damit wir mit ihnen arbeiten können. An dieser Stelle ist es jedoch wichtig zu betonen, dass nicht alle dieser Ganzzahl-Register für alle Rechenoperationen verwendet werden dürfen. Selbst bei einigen Registern, die wir beliebig verwenden dürften, sollten wir davon Abstand nehmen, da wir sie für spezielle Zwecke benötigen. Innerhalb der ARM-CPU gibt es verschiedene 32-Bit Register, die für spezifische Aufgaben verwendet werden:
Register | Zweck |
---|---|
R0 | Allzweckregister |
R1 | Allzweckregister |
R2 | Allzweckregister |
R3 | Allzweckregister |
R4 | Allzweckregister |
R5 | Allzweckregister |
R6 | Allzweckregister |
R7 | Allzweckregister |
R8 | Allzweckregister |
R9 | Allzweckregister |
R10 | Allzweckregister |
R11 | Frame-Pointer |
R12 | Allzweckregister |
R13 | Stack-Pointer |
R14 | Link-Register |
R15 | Programm-Counter |
CPSR | Statusregister |
zurück | Hauptmenü | weiter |