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-64