TP : Initiation à l'assembleur sous Linux dans un
environnement Windows
Objectifs :
1. Installer un prompt Linux sous Windows.
2. Mettre en place l’environnement pour écrire et exécuter du code
assembleur.
3. Écrire, compiler et exécuter un programme simple en assembleur.
4. Acquérir les notions de base tout en développant des compétences de
recherche pour aller plus loin.
Partie 1 : Installer un prompt Linux sous Windows
Étape 1 : Activer le sous-système Windows pour Linux (WSL)
1. Ouvre PowerShell en mode administrateur.
2. Tape la commande suivante pour activer le WSL : “wsl --install”
3. Une fois l’installation terminée, redémarre ton ordinateur si nécessaire.
Étape 2 : Configurer Ubuntu
1. Ouvre Ubuntu via le menu Démarrer.
2. Lors de la première exécution :
○ Configure ton compte utilisateur en définissant un nom
d’utilisateur et un mot de passe.
3. Mets à jour les paquets avec les commandes suivantes : “sudo apt
update && sudo apt upgrade -y”
Partie 2 : Mettre en place l'environnement pour l'assembleur
Étape 1 : Installer les outils nécessaires
Exécute les commandes suivantes dans le terminal Ubuntu :
Installer l'assembleur NASM :
sudo apt install nasm
1. Installer un linker pour générer des exécutables :
sudo apt install gcc
2. Vérifie que les outils sont installés correctement :
nasm -v # Affiche la version de NASM
gcc --version # Affiche la version de GCC
Partie 3 : Exercice pratique - Programmation en assembleur
Objectif général
Les étudiants écriront plusieurs programmes en assembleur, allant du simple
"Hello, World!" à un programme effectuant des opérations mathématiques
avec des variables. Ils seront également encouragés à explorer des instructions
supplémentaires et à intégrer des interactions utilisateur.
Étape 1 : Premier programme - Hello, World!
Objectif : S'assurer que tout fonctionne et se familiariser avec la structure d'un
programme assembleur.
1. Suivre les étapes précédentes pour écrire et exécuter le programme
"Hello, World!" en assembleur.
Code récapitulatif :
section .data
msg db "Hello, World!", 0xA
len equ $ - msg
section .text
global _start
_start:
mov rax, 1 ; Code de write
mov rdi, 1 ; File descriptor (stdout)
mov rsi, msg ; Adresse du message
mov rdx, len ; Longueur du message
syscall
mov rax, 60 ; Code de exit
xor rdi, rdi ; Code de retour (0 = succès)
syscall
Étape 2 : Manipulation des instructions de base
Objectif : Introduire les instructions fondamentales comme mov, add, sub, mul,
div, et leur permettre de manipuler des données simples.
1.
Nouvel exercice : Additionner deux nombres
Demande aux étudiants d’écrire un programme qui effectue les étapes
suivantes :
○ Stocker deux nombres dans des variables.
○ Effectuer leur addition.
○ Afficher le résultat dans le terminal.
Consignes détaillées :
1. Crée un fichier nommé addition.asm.
Écris le programme suivant en assembleur :
section .data
num1 dq 10 ; Premier nombre
num2 dq 20 ; Deuxième nombre
result dq 0 ; Pour stocker le résultat
msg db "Result: ", 0xA ; Message à afficher
section .text
global _start
_start:
mov rax, [num1] ; Charger num1 dans rax
add rax, [num2] ; Ajouter num2 à rax
mov [result], rax ; Stocker le résultat
; Affichage du résultat (écriture simplifiée pour l'exemple)
mov rax, 1
mov rdi, 1
mov rsi, msg
mov rdx, 9
syscall
; Terminer
mov rax, 60
xor rdi, rdi
syscall
2. Compile et exécute le programme en suivant les mêmes étapes qu’avant
(NASM + ld).
Explication des concepts abordés :
● mov: Charger une valeur ou un contenu de mémoire dans un registre.
● add: Additionner deux valeurs (registre ou mémoire).
● Gestion des sections .data (données) et .text (instructions).
Étape 3 : Introduire les interactions utilisateur
Objectif : Ajouter un élément interactif pour demander à l'utilisateur de saisir
deux nombres et afficher leur somme.
1. Consignes pour l’exercice :
○ Écris un programme qui :
■ Demande à l'utilisateur de saisir deux nombres.
■ Lit les nombres entrés depuis le clavier.
■ Effectue leur addition.
■ Affiche le résultat.
2. Points de recherche encouragés :
○ Utiliser les appels système pour lire une entrée utilisateur (syscall
avec read).
○ Convertir une entrée en chaîne de caractères en entier (ASCII à
binaire).
○ Afficher un résultat dans le terminal.
Étape 4 : Approfondir avec des consignes supplémentaires
1.
Exercice facultatif - Opérations mathématiques complexes
Demande aux étudiants de :
○ Implémenter les opérations de base : addition, soustraction,
multiplication, division.
○ Permettre à l'utilisateur de choisir l'opération à exécuter via une
entrée clavier.
2. Exercice facultatif - Boucles et conditions
○ Créer un programme qui affiche les nombres de 1 à 10 en utilisant
une boucle.
○ Ajouter une condition pour afficher uniquement les nombres
pairs.
Guides de recherche pour les étudiants :
● Instructions de boucle (loop, jmp).
● Comparaison de valeurs (cmp, jne, je).
Partie 4 : Compilation, exécution et analyse
1. Compile et exécute chaque programme.
2. Analyse les résultats dans le terminal.
3. En cas d'erreur, utilise les messages du compilateur ou du linker pour
corriger le code.
Conclusion
Ce TP permet aux étudiants de :
1. S’initier à l’écriture et à l’exécution de programmes assembleur.
2. Manipuler les instructions de base (mov, add, etc.) et découvrir leur
fonctionnement.
3. Acquérir une méthode de travail progressive, tout en explorant les sujets
plus complexes par eux-mêmes.