// Compilation :
 //    normal :  gcc hello.c -o hello
 //    debug  :  gcc -ggdb3 hello.c -o hellodbg
 //              gdb hellodbg  
 //                      break main
 //                      run
 //                      next
 //                      (entrée : répète dernière commande)
 //                      help
 //                      help running
 //                      quit
 //
 //                      break addone
 //                      run
 //                      disassemble
 //                              Dump of assembler code for function addone:
 //                              0x000000000040057e <addone+0>:  push   %rbp
 //                              0x000000000040057f <addone+1>:  mov    %rsp,%rbp
 //                              0x0000000000400582 <addone+4>:  mov    %rdi,0xfffffffffffffff8(%rbp)
 //                              0x0000000000400586 <addone+8>:  mov    0xfffffffffffffff8(%rbp),%rax
 //                              0x000000000040058a <addone+12>: inc    %rax
 //                              0x000000000040058d <addone+15>: leaveq
 //                              0x000000000040058e <addone+16>: retq
 // Conclusion : Le paramètre est passé dans rdi
 //              La valeur de retour de la fonction est placée dans rax (registre 64 bits)                 #include <stdio.h>
   extern long addone(long a);
 extern long addtwo(long a);
   int main(int argc, char** argv)
 {
    long a = 2012345678;
    a *= a;    // Pour obtenir un nombre sur 62 bits
    long b;
    long c;
    printf("Hello, bonjour\n" );
    printf("Bonne fête à tous les Eloi, en ce 1er décembre !\n" );
    printf("\n" );
    printf("a = %ld\n",a);
    b = addone(a);
    printf("b = addone(a) = %ld\n",b);
    
    // Mettre en commentaire les deux lignes suivantes et compiler par les commandes situées en tête
    // de fichier pour optenir les traces ci-dessus avec gdb
    c = addtwo(a);
    printf("c = addtwo(a) = %ld\n",c);
 }
   long addone(long a)
 {
   return a + 1;
 }
  
   |