Voici un exemple simple en langage d'assemblage utilisant le GNU Assembler (GAS) pour additionner deux nombres et afficher le résultat dans la console.
.section .data
num1: .long 5 # Premier nombre
num2: .long 7 # Deuxième nombre
result: .long 0 # Emplacement pour stocker le résultat
.section .text
.globl _start
_start:
# Charger les valeurs des nombres dans les registres
movl num1, %eax # Charger num1 dans le registre EAX
movl num2, %ebx # Charger num2 dans le registre EBX
# Effectuer l'addition
addl %ebx, %eax # Ajouter EBX à EAX (EAX = EAX + EBX)
# Stocker le résultat dans la variable 'result'
movl %eax, result # Stocker le résultat dans 'result'
# Préparer les paramètres pour l'appel système 'write' afin d'afficher le résultat
movl $1, %eax # Syscall number (sys_write)
movl $1, %edi # File descriptor (stdout)
leal output(%rip), %rsi # Buffer à écrire
movl $result_length, %edx # Taille du buffer
# Appeler l'appel système 'write'
syscall
# Quitter le programme proprement
movl $60, %eax # Syscall number (sys_exit)
xorl %edi, %edi # Code de sortie (0)
syscall
output:
.ascii "Resultat: "
result_length = . - output + 10 # Taille du texte "Resultat: " + 10 pour la conversion du nombre
Explication du code :
-
Section
.data:- Contient les données nécessaires, c'est-à-dire les deux nombres à additionner et une variable pour stocker le résultat.
-
Section
.text:- Contient le code d'exécution du programme.
_startest le point d'entrée du programme.
-
Chargement des valeurs :
- On charge
num1dans le registreEAXetnum2dans le registreEBX.
- On charge
-
Addition :
- On additionne le contenu des registres
EBXetEAX, en stockant le résultat dansEAX.
- On additionne le contenu des registres
-
Stockage du résultat :
- On déplace le contenu de
EAX(le résultat) dans la variableresult.
- On déplace le contenu de
-
Affichage :
- Pour afficher le résultat, on utilise l'appel système
writepour écrire le texte "Resultat: " suivi du résultat sur la console.
- Pour afficher le résultat, on utilise l'appel système
-
Sortie :
- Le programme se termine proprement en appelant
sys_exit.
- Le programme se termine proprement en appelant
Pour assembler et exécuter ce programme, utilisez les commandes suivantes dans un terminal Linux :
as -o addition.o addition.s
ld -o addition addition.o
./addition
Note : Cet exemple est simplifié et pour un programme plus complet, vous devriez implémenter la conversion de l'entier en chaîne de caractères pour qu'il s'affiche correctement après "Resultat:".
documentation provided by: chatgpt