Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1078 connectés 

  FORUM HardWare.fr
  Programmation
  C

  YASM et GCC sous Linux Debian AMD64 - pour info

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

YASM et GCC sous Linux Debian AMD64 - pour info

n°1257206
nicolas_9
Jésus vous aime
Posté le 02-12-2005 à 00:09:22  profilanswer
 

Bonjour à tous,
 
Je trouve régulièrement de très bonnes infos sur ce site. Aussi, je voudrais aussi contribuer à l'enrichir.
Depuis quelques temps, j'ai un PC AMD64 et j'ai installé Linux Debian AMD64.
 
Et voilà comment on peut écrire des routines en assembleur AMD64 et les linker avec du C :  
 
Chargement de YASM :  
http://www.tortall.net/projects/yasm/wiki/Download
 
Installation de YASM en exécutant les commandes suivantes après décompression :  
./configure
make
make install
(Je crois qu'il faut être root pour faire make install)
 
// Aide sur yasm
man yasm
man yasm_arch    
 
// Assemblage du fichier assembleur :  
yasm -m amd64 -f elf addtwo.asm
 
// Compilation et link avec le fichier principal en C :  
gcc hello.c addtwo.o -o hello
 
// Exécution :  
./hello

  Hello, bonjour
   Bonne fête à tous les Eloi, en ce 1er décembre !
 
   a = 4049535127765279684
   b = addone(a) = 4049535127765279685
   c = addtwo(a) = 4049535127765279686


 
// Merci aux contributeurs de ce topic
http://forum.hardware.fr/hardwaref [...] 3241-1.htm
 
// Infos sur les instructions AMD64 pour YASM :  
http://www.tortall.net/projects/yasm/wiki/AMD64
 
Bon courage à tous.
Nicolas
 
 
Annexe : Les fichiers addtwo.asm et hello.c :
         
addtwo.asm :

BITS 64
 
GLOBAL addtwo
 
SECTION    .text
 
addtwo
 
mov     rax,rdi
inc     rax
inc     rax
ret


 
hello.c :

// 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;
}
 

mood
Publicité
Posté le 02-12-2005 à 00:09:22  profilanswer
 

n°1257271
Sve@r
Posté le 02-12-2005 à 09:59:15  profilanswer
 

nicolas_9 a écrit :

(Je crois qu'il faut être root pour faire make install)


Impératif parce que cela va copier des fichiers dans des répertoires (comme "/usr" ) où seul "root" a accès
 


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  YASM et GCC sous Linux Debian AMD64 - pour info

 

Sujets relatifs
port parallèle Linux (Debian)[linux][ext2fs] galere a trouver les entrées struct ext2_dir_entry
[c++/linux] mise en page en ligne de commande[Linux/X11] Iconification d'une fenetre dans la Taskbar
[java] [linux] arreter un programme java qui boucleRécupérer une info dans un finier ini
Info cellules sur forum php pour couleur cssmettre des couleur sur le SHELL (linux)
Question Intranet,serveur linux 
Plus de sujets relatifs à : YASM et GCC sous Linux Debian AMD64 - pour info


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR