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 :

  1. Section .data :

    • Contient les données nécessaires, c'est-à-dire les deux nombres à additionner et une variable pour stocker le résultat.
  2. Section .text :

    • Contient le code d'exécution du programme.
    • _start est le point d'entrée du programme.
  3. Chargement des valeurs :

    • On charge num1 dans le registre EAX et num2 dans le registre EBX.
  4. Addition :

    • On additionne le contenu des registres EBX et EAX, en stockant le résultat dans EAX.
  5. Stockage du résultat :

    • On déplace le contenu de EAX (le résultat) dans la variable result.
  6. Affichage :

    • Pour afficher le résultat, on utilise l'appel système write pour écrire le texte "Resultat: " suivi du résultat sur la console.
  7. Sortie :

    • Le programme se termine proprement en appelant sys_exit.

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