La section .data
Fait partie de la section Fondamentaux du Journey Assembly de Coddy. Leçon 23 sur 45.
Dans le chapitre 2, vous avez chargé des valeurs depuis la mémoire et stocké des valeurs en mémoire. Mais d'où venait cette mémoire ? Qui a créé num1, num2 et result ?
La réponse est la section .data. C'est ici que vous créez vos propres données en mémoire.
Qu'est-ce que la section .data ?
La section .data est une partie de votre programme en assembleur où vous définissez les données qui seront stockées en mémoire avant l'exécution de votre programme.
Syntaxe :
section .data
; Vos définitions de données vont iciPourquoi vous en avez besoin :
| Sans section .data | Avec section .data |
|---|---|
| Vous n'avez aucune donnée avec laquelle travailler | Vous pouvez créer des nombres, des chaînes de caractères et des variables |
| Les adresses mémoire sont inconnues | Vous pouvez utiliser des étiquettes comme myNumber ou message |
| Vous ne pouvez pas tester votre code | Vous pouvez charger et stocker les données que vous avez créées |
Un exemple simple :
section .data
age db 25 ; Créer un octet appelé "age" avec la valeur 25
price dw 1000 ; Créer un mot appelé "price" avec la valeur 1000
name db 'Bob' ; Créer une chaîne appelée "name" avec les lettres B, o, bOù cela se place dans vos fichiers :
Rappelez-vous le modèle à deux fichiers du Chapitre 0 :
| Fichier | Contenu |
|---|---|
data.asm | section .data avec vos définitions de données |
main.asm | %include "data.asm" suivi de section .text avec votre code |
Ce qui se passe lorsque votre programme s'exécute :
- Le système d'exploitation charge votre programme en mémoire
- Il lit la section
.dataet place vos données à des adresses mémoire spécifiques
- Vos étiquettes (
age,price,name) deviennent des adresses - Votre code peut maintenant accéder à ces adresses en utilisant
[age],[price],[name]
Règles importantes :
| Règle | Explication |
|---|---|
Une section .data par programme | Mettez toutes vos données au même endroit |
| Les étiquettes doivent être uniques | Vous ne pouvez pas avoir deux étiquettes age |
| Les données sont créées avant l'exécution de votre code | Elles sont prêtes à l'emploi lorsque _start commence |
Dans les prochaines leçons, vous apprendrez comment définir différents types de données en utilisant db, dw, dd et dq
Défi
Écrivez le code dans le fichier data.asm pour :
- Créer la section
.data - Créer un octet nommé
countavec la valeur 5
Essayez vous-même
%include "data.asm"
section .text
global _start
_start:
; Charger la valeur de count dans al
mov al, [count]
; La sauvegarder pour l'affichage
mov r12, rax
; Convertir en ASCII et afficher (0-9 uniquement)
add al, 48
mov [digit], al
mov rax, 1
mov rdi, 1
mov rsi, digit
mov rdx, 1
syscall
; Quitter
mov rax, 60
mov rdi, 0
syscall
section .bss
digit resb 1Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Fondamentaux
1La Machine
Qu'est-ce qu'un CPULa mémoireRegistres vs MémoireFonctionnement des instructionsLe modèle à deux fichiersL'architecture x86-64Entraînez-vous par vous-même : Playground Assembly