L'importance du saut de ligne
Fait partie de la section Fondamentaux du Journey Assembly de Coddy — leçon 41 sur 45.
Vous avez ajouté 0x0a (saut de ligne) à la fin de vos chaînes de caractères. Mais que se passe-t-il si vous l'oubliez ?
Sans saut de ligne :
Le texte s'affiche, mais le curseur reste sur la même ligne. Toute sortie future apparaîtra juste à côté.
Exemple sans saut de ligne :
section .data
first db 'Hello'
firstLen equ $ - first
second db 'World'
secondLen equ $ - second
section .text
mov rax, 1
mov rdi, 1
mov rsi, first
mov rdx, firstLen
syscall
mov rax, 1
mov rdi, 1
mov rsi, second
mov rdx, secondLen
syscallSortie :
HelloWorld
Aucun espace. Aucun saut de ligne. Tout est collé.
Avec un saut de ligne :
section .data
first db 'Hello', 0x0a
firstLen equ $ - first
second db 'World', 0x0a
secondLen equ $ - secondSortie :
Hello
World
Chaque chaîne s'affiche sur sa propre ligne.
Ce que fait le saut de ligne :
| Caractère | ASCII | Effet |
|---|---|---|
0x0a | 10 | Déplace le curseur au début de la ligne suivante |
Erreurs courantes liées aux sauts de ligne :
| Erreur | Résultat |
|---|---|
| Aucun saut de ligne | Le texte s'enchaîne sur une seule ligne |
| Saut de ligne uniquement à la fin de la dernière chaîne | Les chaînes précédentes s'enchaînent, la dernière passe à la ligne suivante |
| Saut de ligne au milieu d'une chaîne | Sauts de ligne à des endroits inattendus |
La règle de sécurité :
Ajoutez toujours 0x0a à la fin de chaque chaîne que vous voulez sur sa propre ligne.
Défi
On vous donne trois chaînes de caractères sans sauts de ligne. Votre tâche consiste à les afficher de manière à ce qu'elles apparaissent sur trois lignes distinctes.
Les chaînes sont :
| Chaîne | Valeur |
|---|---|
word1 | 'Apple' |
word2 | 'Banana' |
word3 | 'Cherry' |
Exigences :
- Définissez chaque chaîne avec un saut de ligne (
0x0a) à la fin - Calculez automatiquement la longueur de chaque chaîne
- Affichez les trois chaînes en utilisant l'appel système write
- Quittez proprement avec le code 0
Essayez vous-même
section .data
; TODO : Définir word1 avec 'Apple' et un saut de ligne
; TODO : Définir word2 avec 'Banana' et un saut de ligne
; TODO : Définir word3 avec 'Cherry' et un saut de ligne
; TODO : Calculer les longueurs pour chaque chaîne
section .text
global _start
_start:
; TODO : Afficher word1
; TODO : Afficher word2
; TODO : Afficher word3
; TODO : Quitter proprementsection .data
word1 db 'Apple', 0x0a
word1Len equ $ - word1
word2 db 'Banana', 0x0a
word2Len equ $ - word2
word3 db 'Cherry', 0x0a
word3Len equ $ - word3
section .text
global _start
_start:
mov rax, 1
mov rdi, 1
mov rsi, word1
mov rdx, word1Len
syscall
mov rax, 1
mov rdi, 1
mov rsi, word2
mov rdx, word2Len
syscall
mov rax, 1
mov rdi, 1
mov rsi, word3
mov rdx, word3Len
syscall
mov rax, 60
mov rdi, 0
syscallCette 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-643Première instruction - MOV
Qu'est-ce que MOV ?MOV ImmédiatMOV de Registre à RegistreMOV de la Mémoire vers un RegistreMOV d'un Registre vers la MémoireLEA - Charger l'adresseMOV avec différentes taillesPratique : Échanger des registresRécapitulatif : Défi MOV6Appel système Write
Appel système Write (1)Descripteur de fichier (rdi)Adresse du buffer (rsi)Nombre d'octets (rdx)Assembler le toutAfficher deux chaînesL'importance du saut de ligneRécapitulatif : Configuration de Write