Verzweigungen, Ausnahmegenerierung und Systemanweisungen

Aus C und Assembler mit Raspberry

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 (LR oder X30).

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 X0 gleich null ist.
  • CBNZ (Compare and Branch if Nonzero)
Beispiel: CBNZ X1, label
Erläuterung: Springt zu label, falls X1 ungleich 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 in X0.
  • MSR (Move to System Register)
Beispiel: MSR SCTLR_EL1, X0
Erläuterung: Schreibt den Wert von X0 in 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.