IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

x86 32-bits / 64-bits Assembleur Discussion :

petites questions générales sur gas x86-64


Sujet :

x86 32-bits / 64-bits Assembleur

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 9
    Points : 6
    Points
    6
    Par défaut petites questions générales sur gas x86-64
    hello,
    J'écris une librairie d'arithmétique sur des entiers à taille fixe. Rien de bien nouveau, il en existe une énorme, GMP mais elle est dynamique. J'ai déjà codé une première version de ma lib en C++, cela marche bien et j'ai des bonnes perfs (x2 plus rapide par rapport à gmp).

    Comme l'assembleur propose l instruction adc, et bien je recode mes kernels en assembleur avec cette instruction. j'ai recodé addition, soustraction et j attaque maintenant la multiplication

    Néanmoins j ai un petit pb avec des fonctions à 3 arguments ...

    si je déclare une fonction avec 3 arguments, avec ce petit exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    void test(unsigned long int const * x, unsigned long int const * y, unsigned long int* z){
        asm(
                     "movq (%%rdi)          ,%%rax             \n" 
                     "mulq (%%rsi)                             \n" 
                     "movq %%rax            ,(%%rdx)           \n" 
            : : :"rax","memory"
            );
    }
    j'ai un beau segfault ..

    Par contre si j'écris une fonction à 2 arguments, tout marche

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    void test2(unsigned long int * , unsigned long int* ){
        asm(
                     "movq (%%rdi)          ,%%rax             \n" 
                     "mulq (%%rsi)                             \n" 
                     "movq %%rax            ,(%%rsi)           \n" 
            : : : "rax","memory"
            );
    }
    J'ai un peut de mal à comprendre les directives du mode asm avec gcc, mais je pensais que l'on pouvait directement attendre les arguments avec l'opérateur (). Alors où est mon pb ?
    Merci bien

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Trouvé, utiliser rdx directement c'est le mal !

Discussions similaires

  1. petite question générale sur index unique
    Par ctobini dans le forum Requêtes
    Réponses: 2
    Dernier message: 07/02/2008, 15h45
  2. Petite question générale sur Javascript
    Par skywaukers dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 02/11/2007, 17h49
  3. [LDAP] Questions générales sur LDAP
    Par guiguisi dans le forum Autres SGBD
    Réponses: 5
    Dernier message: 25/05/2005, 10h05
  4. question générale sur les conteneurs
    Par tut dans le forum C++
    Réponses: 6
    Dernier message: 01/09/2004, 10h11
  5. Question générale sur les affectations ?
    Par Clemaster dans le forum C++
    Réponses: 5
    Dernier message: 09/08/2004, 17h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo