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 (newline) à la fin de vos chaînes. Mais que se passe-t-il si vous l'oubliez ?
Sans saut de ligne (newline) :
Le texte s'affiche, mais le curseur reste sur la même ligne. Tout affichage futur 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
Pas d'espace. Pas de newline. Tout est collé.
Avec 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 newline :
| Caractère | ASCII | Effet |
|---|---|---|
0x0a | 10 | Déplace le curseur au début de la ligne suivante |
Common newline mistakes:
| Erreur | Résultat |
|---|---|
| No newline at all | Le texte se superpose sur une seule ligne |
| Newline only at the end of last string | Les chaînes précédentes se superposent, la dernière va à la ligne suivante |
| Newline in the middle of a string | Sauts de ligne à des endroits inattendus |
La règle de sécurité :
Ajoutez toujours 0x0a à la fin de chaque chaîne de caractères que vous souhaitez voir sur sa propre ligne.
Défi
Vous devez afficher trois chaînes de caractères sans saut de ligne afin qu'elles apparaissent sur trois lignes séparées.
Les chaînes de caractères sont :
| String | 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 le 1er texte listé dans les instructions et un saut de ligne
; TODO: Définir word2 avec le 2e texte listé dans les instructions et un saut de ligne
; TODO: Définir word3 avec le 3e texte listé dans les instructions 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