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 là 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
; Placez ici vos définitions de donnéesPourquoi 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 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ée un octet nommé "age" de valeur 25
price dw 1000 ; Crée un mot nommé "price" de valeur 1000
name db 'Bob' ; Crée une chaîne de caractères nommée "name" contenant les lettres B, o, bOù cela va 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
- Tes étiquettes (
age,price,name) deviennent des adresses - Ton code peut maintenant accéder à ces adresses en utilisant
[age],[price],[name]
Règles importantes :
| Règle | Explication |
|---|---|
| Regroupez vos données | Vous pouvez ouvrir section .data plusieurs fois (l’assembleur regroupe les parties), mais une seule section dans data.asm est plus facile à lire |
| 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 à être utilisées lorsque _start commence |
Dans les prochaines leçons, tu apprendras à définir différents types de données à l’aide de 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 appelé
countayant 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 conserver 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