Verzweigungen, Ausnahmegenerierung und Systemanweisungen
Lass uns die Themen Verzweigungen, Ausnahmegenerierung und Systemanweisungen in der ARMv8-Architektur ausführlich betrachten.
Verzweigungen (Branches)
Verzweigungen sind essenziell für die Programmsteuerung und die Implementierung von Schleifen, Bedingungslogik und Funktionsaufrufen. In ARMv8 gibt es verschiedene Instruktionen zum Handhaben von Verzweigungen.
Unbedingte Verzweigung
- B (Branch)
- Beispiel:
B label - Erläuterung: Führt einen Sprung zu label aus.
- BL (Branch with Link)
- Beispiel:
BL function - Erläuterung: Springt zu function und speichert die Rücksprungadresse im Link Register (
LRoderX30).
Bedingte Verzweigung
- B.
- Beispiel:
B.EQ label - Erläuterung: Springt zu label, wenn die Bedingung (EQ = Equal) erfüllt ist.
- Bedingungen sind:
- EQ: Gleich
- NE: Ungleich
- GT: Größer als
- LT: Kleiner als
- GE: Größer oder gleich
- LE: Kleiner oder gleich
- und viele mehr (siehe Bedingungscodes)
Vergleich und Verzweigung
- CBZ (Compare and Branch if Zero)
- Beispiel:
CBZ X0, label - Erläuterung: Springt zu label, falls
X0gleich null ist.
- CBNZ (Compare and Branch if Nonzero)
- Beispiel:
CBNZ X1, label - Erläuterung: Springt zu label, falls
X1ungleich null ist.
Test and Branch
- TBZ (Test Bit and Branch if Zero)
- Beispiel:
TBZ X0, #1, label - Erläuterung: Testet das Bit 1 von
X0. Wenn es null ist, wird zu label gesprungen.
- TBNZ (Test Bit and Branch if Nonzero)
- Beispiel:
TBNZ X0, #0, label - Erläuterung: Testet das Bit 0 von
X0. Wenn es eins ist, wird zu label gesprungen.
Ausnahmegenerierung (Exception Handling)
Exceptions sind spezielle Ereignisse, die den normalen Programmablauf unterbrechen. Sie werden in ARMv8 genutzt, um Fehler, Interrupts oder besondere Bedingungen zu behandeln.
Synchrone Exceptions
- SVC (Supervisor Call)
- Beispiel:
SVC #0 - Erläuterung: Generiert einen Supervisor Call, der in der Regel genutzt wird, um Betriebssystemdienste zu rufen.
- HVC (Hypervisor Call)
- Beispiel:
HVC #0 - Erläuterung: Generiert einen Hypervisor Call, um Hypervisor-Dienste anzufordern.
- SMC (Secure Monitor Call)
- Beispiel:
SMC #0 - Erläuterung: Ruft den Secure Monitor, der im TrustZone-Sicherheitsmodus genutzt wird.
Asynchrone Exceptions
- IRQ (Interrupt Request)
- Wird durch externe Geräte ausgelöst, um den Prozessor zu unterbrechen und eine bestimmte Routine auszuführen.
- FIQ (Fast Interrupt Request)
- Ähnlich wie IRQ, jedoch mit höherer Priorität und effizienterem Kontextwechsel.
Systemanweisungen (System Instructions)
Diese Anweisungen steuern bestimmte Verwaltungsoperationen und betreffen meistens die CPU- oder Memory-Einstellungen.
MRS und MSR (Move to/from System Register)
- MRS (Move from System Register)
- Beispiel:
MRS X0, SCTLR_EL1 - Erläuterung: Liest den Wert des System Control Registers (
SCTLR) und speichert ihn inX0.
- MSR (Move to System Register)
- Beispiel:
MSR SCTLR_EL1, X0 - Erläuterung: Schreibt den Wert von
X0in das System Control Register (SCTLR).
NOP (No Operation)
Beispiel: NOP
Erläuterung: Führt keine Operation aus und wird häufig für Timing-Delays oder Pipeline-Anpassungen verwendet.
System Call
Generierte Systemanrufe für spezielle Dienste und setzten sich oft aus speziellen Instruktionen zusammen.