Der .data-Abschnitt
Teil des Abschnitts Grundlagen der Assembly-Journey von Coddy — Lektion 23 von 45.
In Kapitel 2 haben Sie Werte aus dem Speicher geladen und Werte im Speicher gespeichert. Aber woher kam dieser Speicher? Wer hat num1, num2 und result erstellt?
Die Antwort ist die .data-Sektion. Hier erstellen Sie Ihre eigenen Daten im Speicher.
Was ist die .data-Sektion?
Die .data-Sektion ist ein Teil Ihres Assembler-Programms, in dem Sie Daten definieren, die im Speicher abgelegt werden, bevor Ihr Programm ausgeführt wird.
Syntax:
section .data
; Hier kommen Ihre Datendefinitionen hinWarum man es braucht:
| Ohne .data-Sektion | Mit .data-Sektion |
|---|---|
| Sie haben keine Daten, mit denen Sie arbeiten können | Sie können Zahlen, Zeichenfolgen und Variablen erstellen |
| Speicheradressen sind unbekannt | Sie können Labels wie myNumber oder message verwenden |
| Sie können Ihren Code nicht testen | Sie können von Ihnen erstellte Daten laden und speichern |
Ein einfaches Beispiel:
section .data
age db 25 ; Erstelle ein Byte namens "age" mit dem Wert 25
price dw 1000 ; Erstelle ein Word namens "price" mit dem Wert 1000
name db 'Bob' ; Erstelle einen String namens "name" mit den Buchstaben B, o, bWo es in Ihren Dateien steht:
Erinnern Sie sich an das Zwei-Dateien-Muster aus Kapitel 0:
| Datei | Inhalt |
|---|---|
data.asm | section .data mit Ihren Datendefinitionen |
main.asm | %include "data.asm" gefolgt von section .text mit Ihrem Code |
Was passiert, wenn Ihr Programm ausgeführt wird:
- Das Betriebssystem lädt Ihr Programm in den Arbeitsspeicher
- Es liest den
.data-Abschnitt und platziert Ihre Daten an spezifischen Speicheradressen
- Ihre Labels (
age,price,name) werden zu Adressen - Ihr Code kann nun unter Verwendung von
[age],[price],[name]auf diese Adressen zugreifen
Wichtige Regeln:
| Regel | Erklärung |
|---|---|
Ein .data-Abschnitt pro Programm | Platzieren Sie alle Ihre Daten an einem Ort |
| Labels müssen eindeutig sein | Sie können nicht zwei age-Labels haben |
| Daten werden erstellt, bevor Ihr Code ausgeführt wird | Sie sind einsatzbereit, wenn _start beginnt |
In den nächsten Lektionen wirst du lernen, wie man verschiedene Datentypen mit db, dw, dd und dq definiert.
Aufgabe
Schreiben Sie den Code in der Datei data.asm, um:
- Die Sektion
.datazu erstellen - Ein Byte namens
countmit dem Wert 5 zu erstellen
Probier es selbst
%include "data.asm"
section .text
global _start
_start:
; Lade den Wert von count in al
mov al, [count]
; Speichere ihn für die Ausgabe
mov r12, rax
; In ASCII umwandeln und ausgeben (nur 0-9)
add al, 48
mov [digit], al
mov rax, 1
mov rdi, 1
mov rsi, digit
mov rdx, 1
syscall
; Beenden
mov rax, 60
mov rdi, 0
syscall
section .bss
digit resb 1Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Grundlagen
1Die Maschine
Was ist eine CPUSpeicherRegister vs. SpeicherWie Befehle funktionierenZwei-Dateien-MusterDie x86-64 Architektur