Sprungadressen (Labels): Unterschied zwischen den Versionen
KKeine Bearbeitungszusammenfassung |
KKeine Bearbeitungszusammenfassung |
||
| Zeile 1: | Zeile 1: | ||
Labels sind | Labels sind '''Bezeichner für Adressen''' im Code oder in den Datenabschnitten. Sie dienen vor allem dazu, Sprünge, Verzweigungen und Datenzugriffe lesbar und wartbar zu gestalten. Es gibt zwei Hauptarten von Labels: | ||
== 1. Benannte Labels == | == 1. Benannte Labels == | ||
| Zeile 18: | Zeile 18: | ||
=== Verwendung === | === Verwendung === | ||
* Ziel von Sprüngen ( | * Ziel von Sprüngen (<code>b</code>, <code>bl</code>, <code>cbz</code>, <code>b.eq</code> etc.) | ||
* Definition von Daten im | * Definition von Daten im <code>.data</code>-Segment | ||
* Symbolischer Zugriff durch Debugger oder Linker | * Symbolischer Zugriff durch Debugger oder Linker | ||
| Zeile 32: | Zeile 32: | ||
== 2. Numerische Labels == | == 2. Numerische Labels == | ||
Numerische Labels bestehen nur aus einer Zahl, gefolgt von einem Doppelpunkt, z. B. | Numerische Labels bestehen nur aus einer Zahl, gefolgt von einem Doppelpunkt, z. B. <code>1:</code>, <code>2:</code> usw. | ||
<syntaxhighlight lang="asm"> | <syntaxhighlight lang="asm"> | ||
| Zeile 43: | Zeile 43: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
=== Verwendung von | === Verwendung von <code>f</code> und <code>b</code> === | ||
* | * <code>1f</code> – "1 forward": springt zum '''nächsten''' Vorkommen von <code>1:</code> | ||
* | * <code>1b</code> – "1 backward": springt zum '''vorherigen''' Vorkommen von <code>1:</code> | ||
=== Typisches Beispiel für eine Schleife: === | === Typisches Beispiel für eine Schleife: === | ||
| Zeile 61: | Zeile 61: | ||
== 3. Labels in Makros == | == 3. Labels in Makros == | ||
Innerhalb von Makros sind benannte Labels problematisch, da sie mehrfach verwendet werden können und zu Konflikten führen. Deshalb sind numerische Labels oder lokale Labels mit eindeutigen Suffixen (z. B. | Innerhalb von Makros sind benannte Labels problematisch, da sie mehrfach verwendet werden können und zu Konflikten führen. Deshalb sind numerische Labels oder lokale Labels mit eindeutigen Suffixen (z. B. <code>\@</code>) üblich. | ||
<syntaxhighlight lang="asm"> | <syntaxhighlight lang="asm"> | ||
| Zeile 73: | Zeile 73: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== 4. Lokale Labels ( | == 4. Lokale Labels (<code>.L</code>) == | ||
Labels, die mit | Labels, die mit <code>.L</code> beginnen, sind '''lokale Labels''', die vom Linker ignoriert und nicht exportiert werden. Diese werden meist vom Compiler automatisch erzeugt, können aber auch manuell verwendet werden: | ||
<syntaxhighlight lang="asm"> | <syntaxhighlight lang="asm"> | ||
| Zeile 88: | Zeile 88: | ||
! Label-Typ !! Beispiel !! Verwendung | ! Label-Typ !! Beispiel !! Verwendung | ||
|- | |- | ||
| Benannter Label || | | Benannter Label || <code>start:</code> || Für allgemeine Sprünge, Daten | ||
|- | |- | ||
| Numerischer Label || | | Numerischer Label || <code>1:</code> / <code>1f</code> / <code>1b</code> || Kurzzeitige Sprünge | ||
|- | |- | ||
| Lokaler Label || | | Lokaler Label || <code>.Lloop:</code> || Interner Sprung, nicht exportiert | ||
|} | |} | ||
| Zeile 98: | Zeile 98: | ||
* Verwende numerische Labels für kurze Schleifen oder Sprungziele | * Verwende numerische Labels für kurze Schleifen oder Sprungziele | ||
* Nutze benannte Labels für größere Strukturen und zur besseren Lesbarkeit | * Nutze benannte Labels für größere Strukturen und zur besseren Lesbarkeit | ||
* Achte auf Mehrfachverwendungen in Makros – numerische Labels oder eindeutige | * Achte auf Mehrfachverwendungen in Makros – numerische Labels oder eindeutige <code>.L</code>-Labels helfen | ||
Version vom 11. April 2025, 10:32 Uhr
Labels sind Bezeichner für Adressen im Code oder in den Datenabschnitten. Sie dienen vor allem dazu, Sprünge, Verzweigungen und Datenzugriffe lesbar und wartbar zu gestalten. Es gibt zwei Hauptarten von Labels:
1. Benannte Labels
Ein benannter Label ist ein selbstgewählter Name, der mit einem Doppelpunkt abgeschlossen wird:
loop_start:
// Anweisungen
b loop_start // Sprung zurück zu loop_start
Eigenschaften
- Müssen mit einem Buchstaben oder Unterstrich beginnen
- Können Buchstaben, Zahlen und Unterstriche enthalten
- Dürfen nicht mit einer Zahl beginnen
- Groß- und Kleinschreibung wird unterschieden
Verwendung
- Ziel von Sprüngen (
b,bl,cbz,b.eqetc.) - Definition von Daten im
.data-Segment - Symbolischer Zugriff durch Debugger oder Linker
.data
message:
.asciz "Hallo Welt"
.text
ldr x0, =message
2. Numerische Labels
Numerische Labels bestehen nur aus einer Zahl, gefolgt von einem Doppelpunkt, z. B. 1:, 2: usw.
1:
// Code
b 1f // "1f" = nächstes Vorkommen von Label 1
...
1:
// Ziel von 1f
Verwendung von f und b
1f– "1 forward": springt zum nächsten Vorkommen von1:1b– "1 backward": springt zum vorherigen Vorkommen von1:
Typisches Beispiel für eine Schleife:
mov x0, #5
1:
// irgendeine Operation
subs x0, x0, #1
bne 1b // zurück zum letzten Label 1
3. Labels in Makros
Innerhalb von Makros sind benannte Labels problematisch, da sie mehrfach verwendet werden können und zu Konflikten führen. Deshalb sind numerische Labels oder lokale Labels mit eindeutigen Suffixen (z. B. \@) üblich.
.macro repeat_loop count
mov \count, #3
1:
// irgendwas tun
subs \count, \count, #1
bne 1b
.endm
4. Lokale Labels (.L)
Labels, die mit .L beginnen, sind lokale Labels, die vom Linker ignoriert und nicht exportiert werden. Diese werden meist vom Compiler automatisch erzeugt, können aber auch manuell verwendet werden:
b .Lskip
// Code wird übersprungen
.Lskip:
Zusammenfassung
| Label-Typ | Beispiel | Verwendung |
|---|---|---|
| Benannter Label | start: |
Für allgemeine Sprünge, Daten |
| Numerischer Label | 1: / 1f / 1b |
Kurzzeitige Sprünge |
| Lokaler Label | .Lloop: |
Interner Sprung, nicht exportiert |
Tipps
- Verwende numerische Labels für kurze Schleifen oder Sprungziele
- Nutze benannte Labels für größere Strukturen und zur besseren Lesbarkeit
- Achte auf Mehrfachverwendungen in Makros – numerische Labels oder eindeutige
.L-Labels helfen