Menu
CoddyTech

Der .data-Abschnitt

Teil des Abschnitts Grundlagen der Assembly-Journey von Coddy. Lektion 23 von 45.

In Kapitel 2 hast du Werte aus dem Speicher geladen und Werte im Speicher abgelegt. Aber woher kam dieser Speicher? Wer hat num1, num2 und result erstellt?

Die Antwort ist der .data-Abschnitt. Hier erstellst du deine eigenen Daten im Speicher.

Was ist der .data-Abschnitt?

Der Abschnitt .data ist ein Teil deines Assemblerprogramms, in dem du Daten definierst, die im Speicher abgelegt werden, bevor dein Programm ausgeführt wird.

Syntax:

section .data
    ; Hier kommen deine Datendefinitionen hin

Warum du es brauchst:

Ohne .data-AbschnittMit .data-Abschnitt
Du hast keine Daten, mit denen du arbeiten kannstDu kannst Zahlen, Zeichenketten und Variablen erstellen
Speicheradressen sind unbekanntDu kannst Labels wie myNumber oder message verwenden
Du kannst deinen Code nicht testenDu kannst Daten laden und speichern, die du erstellt hast

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 eine Zeichenkette namens "name" mit den Buchstaben B, o, b

Wo es in deinen Dateien hingehört:

Denk an das Zwei-Dateien-Muster aus Kapitel 0:

DateiInhalt
data.asmsection .data mit deinen Datendefinitionen
main.asm%include "data.asm" gefolgt von section .text mit deinem Code

Was passiert, wenn dein Programm ausgeführt wird:

  1. Das Betriebssystem lädt dein Programm in den Speicher
  2. Es liest den Abschnitt .data und platziert deine Daten an bestimmten Speicheradressen
  1. Deine Labels (age, price, name) werden zu Adressen
  2. Dein Code kann jetzt mit [age], [price], [name] auf diese Adressen zugreifen

Wichtige Regeln:

RegelErklärung
Halte deine Daten zusammenDu könntest section .data mehr als einmal öffnen (der Assembler fügt die Teile zusammen), aber ein Abschnitt in data.asm ist leichter zu lesen
Labels müssen eindeutig seinDu kannst nicht zwei age-Labels haben
Daten werden erstellt, bevor dein Code ausgeführt wirdSie sind einsatzbereit, wenn _start beginnt

In den nächsten Lektionen lernst du, wie du verschiedene Datentypen mit db, dw, dd und dq definierst.

challenge icon

Aufgabe

Schreibe den Code in der Datei data.asm, um:

  1. den Abschnitt .data zu erstellen
  2. ein Byte namens count mit dem Wert 5 zu erstellen

Probier es selbst

%include "data.asm"

section .text
    global _start

_start:
    ; Lade den Wert aus count in al
    mov al, [count]
    
    ; Speichere ihn für die Ausgabe
    mov r12, rax
    
    ; Wandle ihn in ASCII um und gib ihn aus (nur 0-9)
    add al, 48
    mov [digit], al
    
    mov rax, 1
    mov rdi, 1
    mov rsi, digit
    mov rdx, 1
    syscall
    
    ; Beende das Programm
    mov rax, 60
    mov rdi, 0
    syscall

section .bss
    digit resb 1
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Grundlagen

Übe selbstständig: Assembly-Playground