Précédent   Forum du club des développeurs et IT Pro > Autres langages > Assembleur > x86 32-bits / 64-bits
x86 32-bits / 64-bits Architectures x86 32/64 bits et leurs outils (assembleurs, debuggers, émulateurs...)
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 20/03/2012, 21h51   #1
timgenf
Invité de passage
 
Inscription : mars 2012
Messages : 9
Détails du profil
Informations forums :
Inscription : mars 2012
Messages : 9
Points : 3
Points : 3
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 :
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 :
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
timgenf est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/03/2012, 00h05   #2
timgenf
Invité de passage
 
Inscription : mars 2012
Messages : 9
Détails du profil
Informations forums :
Inscription : mars 2012
Messages : 9
Points : 3
Points : 3
Trouvé, utiliser rdx directement c'est le mal !
timgenf est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 04h07.


 
 
 
 
Partenaires

Hébergement Web